作者whow (somebody)
看板AndroidDev
标题[问题] AlertDialog里加入有Checkbox的Listview
时间Tue Aug 20 05:05:38 2013
如标题
我想在要我的MainActivity中按下一个按钮跳出AlertDialog
让使用者有一个List可以选择自己想要的选项
并且有checkbox可以复选 等到按下确认键後再把这些选项存起来
看起来应该是要自己写一个Adapter
但是我试了好久 老是在listview.setAdapter(adapter)出错
//listview是我ListView物件 adapter是我自己写的Adapter
因为我把这行注解起来後程式是可以执行的@@
我的想法是:
MyAdapter adapter = new MyAdapter(String[] items, MainActivity.this);
先宣告一个自己写的adapter
MyAdapter的Constructor:
MyAdapter(String[] name, Context context){
/*
把给定的项目存到一个list里
initialize checkbox的状态
*/
inflater = LayoutInflater.from(context);
}
而getview则是这样:
public View getView(int position, View convertView, ViewGroup parent) {
View view=null;
ViewHolder holder = null;
if (map.get(position) == null) {
//map是一个用来存位置和view的HashMap
view = inflater.inflate(R.layout.item, null);
holder = new ViewHolder();
holder.selected = (CheckBox)view.findViewById(R.id.item_cb);
holder.name = (TextView)view.findViewById(R.id.item_tv);
final int p = position;
map.put(position, view);
holder.selected.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CheckBox cb = (CheckBox)v;
mChecked.set(p, cb.isChecked());
//mChecked为项目是否被选取的list
}
});
view.setTag(holder);
}else{
view = map.get(position);
holder = (ViewHolder)view.getTag();
}
holder.selected.setChecked(mChecked.get(position));
holder.name.setText(list.get(position));
return view;
}
在MainActivity中有这几行:
ListView lv = (ListView)findViewById(R.id.list);
adapter = new MyAdapter(items, MainActivity.this);
lv.setAdapter(adapter);
new AlertDialog.Builder(Gps_test.this)
.setTitle("CheckBoxtest")
.setView(lv)
.setPositiveButton(...){...}
.setNegativeButton(...){...}
.show();
标记起来的地方是我觉得可能有错的地方
已经卡一两天了 烦请各位帮忙@@
这段code是从网路上找到的 有自己修改一点
如果有哪里描述不够清楚我会再补上!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.164.149.193
1F:推 shawnba:感觉是 findViewById 的问题, 要用 view.findViewById 08/20 09:45
3F:推 givemepass:出错的log贴出来看看 08/20 12:00
s大指的是ListView lv = (ListView)findViewById(R.id.list);
要改成ListView lv = (ListView)lv.findViewById(R.id.list); 吗?
我试过了还是一样@@
m大指的log是这个吗?
08-20 13:25:52.868: D/AndroidRuntime(2061): Shutting down VM
08-20 13:25:52.868: W/dalvikvm(2061): threadid=1: thread exiting with
uncaught exception (group=0x400259f8)
08-20 13:25:52.868: E/AndroidRuntime(2061): FATAL EXCEPTION: main
08-20 13:25:52.868: E/AndroidRuntime(2061): java.lang.RuntimeException:
Unable to start activity
ComponentInfo{com.example.project/com.example.project.MainActivity}:
java.lang.NullPointerException
08-20 13:25:52.868: E/AndroidRuntime(2061): at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2787)
08-20 13:25:52.868: E/AndroidRuntime(2061): at
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2803)
08-20 13:25:52.868: E/AndroidRuntime(2061): at
android.app.ActivityThread.access$2300(ActivityThread.java:135)
08-20 13:25:52.868: E/AndroidRuntime(2061): at
android.app.ActivityThread$H.handleMessage(ActivityThread.java:2136)
08-20 13:25:52.868: E/AndroidRuntime(2061): at
android.os.Handler.dispatchMessage(Handler.java:99)
08-20 13:25:52.868: E/AndroidRuntime(2061): at
android.os.Looper.loop(Looper.java:144)
08-20 13:25:52.868: E/AndroidRuntime(2061): at
android.app.ActivityThread.main(ActivityThread.java:4937)
08-20 13:25:52.868: E/AndroidRuntime(2061): at
java.lang.reflect.Method.invokeNative(Native Method)
08-20 13:25:52.868: E/AndroidRuntime(2061): at
java.lang.reflect.Method.invoke(Method.java:521)
08-20 13:25:52.868: E/AndroidRuntime(2061): at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
08-20 13:25:52.868: E/AndroidRuntime(2061): at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
08-20 13:25:52.868: E/AndroidRuntime(2061): at
dalvik.system.NativeStart.main(Native Method)
08-20 13:25:52.868: E/AndroidRuntime(2061): Caused by:
java.lang.NullPointerException
08-20 13:25:52.868: E/AndroidRuntime(2061): at
com.example.project.MainActivity.showCheckBoxListView(MainActivity.java:253)
08-20 13:25:52.868: E/AndroidRuntime(2061): at
com.example.project.MainActivity.onCreate(MainActivity.java:103)
08-20 13:25:52.868: E/AndroidRuntime(2061): at
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1069)
08-20 13:25:52.868: E/AndroidRuntime(2061): at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2751)
08-20 13:25:52.868: E/AndroidRuntime(2061): ... 11 more
这是我用eclipse跑完後再logcat找到的
※ 编辑: whow 来自: 218.164.149.193 (08/20 13:35)
4F:→ givemepass:看一下253行是啥 喷出NullPointerException通常是 08/20 13:39
5F:→ givemepass:元件没有初始化 08/20 13:40
6F:→ whow:lv = (ListView)lv.findViewById(R.id.friends_list); 08/20 13:51
7F:→ whow:我觉得这样应该有给lv初值了吧.. 08/20 13:52
8F:推 givemepass:lv = (ListView)findViewById(R.id.friends_list); 08/20 14:04
9F:→ givemepass:试看看 08/20 14:04
10F:→ whow:不行耶 我觉得问题应该是出在MyAdapter.. 08/20 15:57
11F:推 givemepass:把你整份code丢上来吧 不然不知道要猜到甚麽时候 08/20 17:36