警报对话框中的多项选择

时间:2011-03-05 15:47:46

标签: android checkbox cursor alertdialog

我正在关注以下问题。 我有一个带有setMultipleChoiceItems的警告对话框,创建了对话框 并正确显示但当我尝试取消选中任何一个时 物品,物品保持检查。 以下是代码片段:

SimpleCursorAdapter adapter = new SimpleCursorAdapter(context, 
                        android.R.id.text1, 
                        c, 
                        new String[] {label}, 
                        new int[] {android.R.id.text1} 
            ); 
            AlertDialog dialog=new AlertDialog.Builder(context) 
               .setTitle(title) 
               .setPositiveButton(R.string.okBtn, null) 
               .setNegativeButton(R.string.cancelBtn, null) 
               .setMultiChoiceItems(c,state,label, 
               new DialogInterface.OnMultiChoiceClickListener() { 
                            public void onClick(DialogInterface dialog, int which, 
                                            boolean isChecked) { 
                                    Log.v("TEST", "onClick(..) called with value " + which +
                                       " / "+ isChecked); 
                            } 
               }) 
               .create(); 
             dialog.show() 

尽管如此,在日志I中调用了方法OnMultiChoiceClickListener() 可以看到: “onClick(..)调用值为2 / false” 所以它说选择的项目应该是FALSE(未选中)但是 对话框未更新,项目保持选中状态。 任何想法为什么会这样?

1 个答案:

答案 0 :(得分:0)

因此:http://code.google.com/p/android/issues/detail?id=2998

至少据我所知,您必须在选中/取消选中项目时更新数据库。就个人而言,我不喜欢这个想法,对于多选列表我使用ListArrays而不是游标:

        final Cursor mCursor = mDbAdapter.getAllData();
        final CharSequence[] names = new CharSequence[mCursor.getCount()];
        final boolean[] selected = new boolean[mCursor.getCount()];
        mCursor.moveToFirst();
        while (!mCursor.isAfterLast()) {
            names[it] = mCursor.getString(0);
            selected[it] = mCursor.getString(1);                
            mCursor.moveToNext();
        }
        mCursor.close();

        mBuilder.setMultiChoiceItems(names, selected, new DialogInterface.OnMultiChoiceClickListener() {
            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                Toast.makeText(getApplicationContext(), names[which] + ": " + ((isChecked) ? "on" : "off"), Toast.LENGTH_SHORT).show();
            }
        });

这不是最好的方法,但我不知道更好。