2016-07-12 12 views
0

listViewでボタンをクリックした後にポップアップウィンドウを作成しようとしていて、ボックスの外側をクリックして閉じます。ただし、ボタンをクリックしようとするとこのエラーが発生します。nullポインター例外カスタムアダプターを使用してlistViewにポップアップウィンドウを作成しようとしたとき

                    java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.IBinder android.view.View.getWindowToken()' on a null object reference 
                        at android.widget.PopupWindow.showAtLocation(PopupWindow.java:897) 
                        at logistica.enviaflores.com.logistica.utilities.MyAdapter$1.onClick(MyAdapter.java:81) 
                        at android.view.View.performClick(View.java:4780) 
                        at android.view.View$PerformClick.run(View.java:19866) 
                        at android.os.Handler.handleCallback(Handler.java:739) 
                        at android.os.Handler.dispatchMessage(Handler.java:95) 
                        at android.os.Looper.loop(Looper.java:135) 
                        at android.app.ActivityThread.main(ActivityThread.java:5254) 
                        at java.lang.reflect.Method.invoke(Native Method) 
                        at java.lang.reflect.Method.invoke(Method.java:372) 
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

nullポインタ例外をスローするために間違っていることを正確に理解できません。おそらく私はそれを間違ってコーディングしていますが、私が戻ってそれを見た後でさえ私には正しいようです。どんな助けでも大歓迎です。

public class MyAdapter extends BaseAdapter { 
    private Context mContext; 
    private List<Bean> mList; 
    private PopupWindow popUpWindow; 
    private LayoutInflater inflater; 

public MyAdapter(Context context,List<Bean> list){ 
    mContext=context; 
    mList=list; 


} 

@Override 
public int getCount() { 
    return mList.size(); 
} 

@Override 
public Object getItem(int position) { 
    return mList.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 
    //use convertView recycle 
    if(convertView==null){ 
     holder=new ViewHolder(); 
     convertView = LayoutInflater.from(mContext).inflate(R.layout.content_orders, parent, false); 
     holder.textView= (TextView) convertView.findViewById(R.id.textView2); 
     holder.imageView= (ImageView) convertView.findViewById(R.id.imageView2); 
     holder.information= (Button) convertView.findViewById(R.id.button5); 
     convertView.setTag(holder); 
    }else{ 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    //set text and url 
    holder.information.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 


      inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      ViewGroup container = (ViewGroup) inflater.inflate(R.layout.information_popup, null); 
      popUpWindow = new PopupWindow(container, 400,400,true); 
//***I believe the problem happens right in the line under this sentence!*** 
      popUpWindow.showAtLocation(v.findViewById(R.id.orders), Gravity.CENTER, 0,0); 

      container.setOnTouchListener(new View.OnTouchListener() { 
       @Override 
       public boolean onTouch(View view, MotionEvent motionEvent) { 
        popUpWindow.dismiss(); 
        return true; 
       } 
      }); 
     } 
    }); 

    holder.textView.setText(mList.get(position).getText()); 
    Picasso.with(mContext).load(mList.get(position).getUrl()).resize(500,500).into(holder.imageView); 

    return convertView; 
} 

class ViewHolder{ 
    TextView textView; 
    ImageView imageView; 
    Button information; 
    Button close; 

    } 
} 
+1

完全なlogcatを投稿してください。有用なものを推測できるかもしれません。また、行番号に注意して、エラーが発生したコード行を強調表示してみてください。 – Vucko

+0

@Vucko私はlogcatを投稿しました。このエラーは、アダプター内のonclickリスナーで発生します。私はそれが少し分かりやすいと思ったが、理解していない人のためにそれを指摘してくれてありがとう。 :) – Kekis2014

+0

ID ** R.id.orders **のビューが** v ** –

答えて

2

代わりの情報ボタンビューにR.id.ordersを探し、convertView

古いコードでの検索:

popUpWindow.showAtLocation(v.findViewById(R.id.orders), Gravity.CENTER, 0,0); 

新しいコード:

popUpWindow.showAtLocation(convertView.findViewById(R.id.orders), Gravity.CENTER, 0,0); 
関連する問題