2011-03-05 5 views
1

다음 문제에 집중하고 있습니다. 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() 

Althought는 방법 OnMultiChoiceClickListener()가 호출되고 로그에 내가 볼 수 있습니다 : 는 "값으로 호출 온 클릭은 (..) 2/거짓" 이 그렇게 말한다 여기 코드의 조각이다 선택한 항목이 거짓 (미확인)으로되어 있지만 대화 상자가 업데이트되지 않고 항목이 체크 된 상태로 유지됩니다. 왜 이런 생각입니까? 이 때문에

답변

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(); 
      } 
     }); 

그것은 그것을 할 수있는 가장 좋은 방법은 아니지만, 내가 더 좋은 모르겠어요.

관련 문제