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;
}
}
完全なlogcatを投稿してください。有用なものを推測できるかもしれません。また、行番号に注意して、エラーが発生したコード行を強調表示してみてください。 – Vucko
@Vucko私はlogcatを投稿しました。このエラーは、アダプター内のonclickリスナーで発生します。私はそれが少し分かりやすいと思ったが、理解していない人のためにそれを指摘してくれてありがとう。 :) – Kekis2014
ID ** R.id.orders **のビューが** v ** –