[問題] AlertDialog裡加入有Checkbox的Listview
如標題
我想在要我的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
推
08/20 09:45, , 1F
08/20 09:45, 1F
→
08/20 09:46, , 2F
08/20 09:46, 2F
推
08/20 12:00, , 3F
08/20 12:00, 3F
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)
→
08/20 13:39, , 4F
08/20 13:39, 4F
→
08/20 13:40, , 5F
08/20 13:40, 5F
→
08/20 13:51, , 6F
08/20 13:51, 6F
→
08/20 13:52, , 7F
08/20 13:52, 7F
推
08/20 14:04, , 8F
08/20 14:04, 8F
→
08/20 14:04, , 9F
08/20 14:04, 9F
→
08/20 15:57, , 10F
08/20 15:57, 10F
推
08/20 17:36, , 11F
08/20 17:36, 11F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):