问题描述
- Android 获取listview数据 然后赋值给popupwindow用于显示报空指针
-
能得到数据但是给Textview赋值却报空指针!
下边贴代码。
gv.setOnItemClickListener(new OnItemClickListener() {@Override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
// WindowManager.LayoutParams lp=getWindow().getAttributes();
// lp.alpha = 0.4f;
// getWindow().setAttributes(lp);food= (FoodInfo)data.get(position); // 数据类获取数据 Toast.makeText(getApplicationContext(), food.getFoodName(), Toast.LENGTH_SHORT).show(); //这里可以正常显示,说明得到了数据 TextView name=(TextView) findViewById(R.id.popup_tv1);//popupwindow name.setText(food.getFoodName()); // setText 报空指针 initPopuWindow1(arg0); // 加载弹出框 }
解决方案
先加载TextView name所在的布局view,然后这样得到你的name,TextView name=(TextView)view.findViewById(R.id.popup_tv1);
解决方案二:
你自己调试一下,两个地方可能为null
name和food,你看看是不是
解决方案三:
最好用arg3,position,如果你有headerview的话,这个postion会有问题,而且position从1开始,你要用也要position-1
解决方案四:
我已经找到原因了,。 我的name对应的R.id.popup_tv1 不在 当前类对应的layout ,activity_main 中 而是我contentView1 = mLayoutInflater.inflate(R.layout.popupwindow_food, null); 添加的自定义布局中, 这样我该怎样把值传过去啊!
解决方案五:
09-17 12:09:04.231: E/AndroidRuntime(28241): FATAL EXCEPTION: main
09-17 12:09:04.231: E/AndroidRuntime(28241): Process: com.example.shaomapapptest, PID: 28241
09-17 12:09:04.231: E/AndroidRuntime(28241): java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
09-17 12:09:04.231: E/AndroidRuntime(28241): at com.sm.activity.MainActivity$3.onItemClick(MainActivity.java:193)
09-17 12:09:04.231: E/AndroidRuntime(28241): at android.widget.AdapterView.performItemClick(AdapterView.java:310)
09-17 12:09:04.231: E/AndroidRuntime(28241): at android.widget.AbsListView.performItemClick(AbsListView.java:1285)
09-17 12:09:04.231: E/AndroidRuntime(28241): at android.widget.AbsListView$PerformClick.run(AbsListView.java:3375)
09-17 12:09:04.231: E/AndroidRuntime(28241): at android.widget.AbsListView$3.run(AbsListView.java:4354)
09-17 12:09:04.231: E/AndroidRuntime(28241): at android.os.Handler.handleCallback(Handler.java:815)
09-17 12:09:04.231: E/AndroidRuntime(28241): at android.os.Handler.dispatchMessage(Handler.java:104)
09-17 12:09:04.231: E/AndroidRuntime(28241): at android.os.Looper.loop(Looper.java:194)
09-17 12:09:04.231: E/AndroidRuntime(28241): at android.app.ActivityThread.main(ActivityThread.java:5691)
09-17 12:09:04.231: E/AndroidRuntime(28241): at java.lang.reflect.Method.invoke(Native Method)
09-17 12:09:04.231: E/AndroidRuntime(28241): at java.lang.reflect.Method.invoke(Method.java:372)
09-17 12:09:04.231: E/AndroidRuntime(28241): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
09-17 12:09:04.231: E/AndroidRuntime(28241): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
这是log
解决方案六:
你可以用LayoutInflate把你那个popuptv1所在的layout布局文件加载到当期类里面,然后再去查找相应的控件,在赋值试试,。