2011-08-28 3 views
4

다음 Alert.Builder에서 검사 된 항목에 대한 정보를 얻을 수있는 방법이 있습니까? 누군가가 긍정적 인 버튼을 클릭했을 때 SharedPreferences에 일부 부울을 저장해야합니다. 이러한 불리언 값은 사용자가 경고에서 선택한 것입니다. 어떻게 얻을 수 있습니까?Alert.Builder의 다중 선택 항목에서 체크 된 항목을 얻는 방법?

 AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     final SharedPreferences preferences = getSharedPreferences("type_settings", MODE_PRIVATE); 

     boolean[] selectedTypes = getSelectedTypes(preferences); 

     builder.setIcon(R.drawable.menu_type) 
       .setTitle(R.string.list_dialog_title) 
       .setMultiChoiceItems(R.array.select_type_items, selectedTypes, 
         new DialogInterface.OnMultiChoiceClickListener() { 
          public void onClick(DialogInterface dialog, int whichButton, boolean isChecked) { 
          } 
         }) 
       .setPositiveButton(R.string.types_save, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton) { 
         SharedPreferences.Editor prefEditor = preferences.edit(); 
        } 
       }) 
       .setNegativeButton(R.string.types_cancel, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton) { 
         dialog.cancel(); 
        } 
       }) 
       .create(); 
     builder.show(); 

답변

2

나는 어떤면에서 문제를 해결할 수 있었지만 좋은 연습인지는 잘 모릅니다. 다음은 코드입니다.

 AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     final SharedPreferences preferences = getSharedPreferences("type_settings", MODE_PRIVATE); 

     final String[] availableTypes = getResources().getStringArray(R.array.select_type_items); 
     final boolean[] selectedTypes = getSelectedTypes(preferences, availableTypes); 

     builder.setIcon(R.drawable.menu_type) 
       .setTitle(R.string.list_dialog_title) 
       .setMultiChoiceItems(R.array.select_type_items, selectedTypes, 
         new DialogInterface.OnMultiChoiceClickListener() { 
          public void onClick(DialogInterface dialog, int whichButton, boolean isChecked) { 
           selectedTypes[whichButton] = isChecked; 
          } 
         }) 
       .setPositiveButton(R.string.types_save, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton) { 
         SharedPreferences.Editor prefEditor = preferences.edit(); 
         saveSelectedTypes(prefEditor, availableTypes, selectedTypes); 
        } 
       }) 
       .setNegativeButton(R.string.types_cancel, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton) { 
         dialog.cancel(); 
        } 
       }) 
       .create(); 
     builder.show(); 
+0

좋은 해결책. 그러나 선택한 항목 만 환경 설정에 저장하는 것이 올바른 방법입니다. 모든 항목, 심지어 선택되지 않은 항목까지 저장하고 있습니다. 네가 필요로하는 것이 맞다면. – Ronnie

+0

나는 체크되지 않은 것들도 필요하다고 생각하지만, 어쨌든, 나의 배열은 매우 크지 않고, 단지 15 요소들입니다. – DaJackal

+0

saveSelectedTypes 코드를 포함 할 수 있습니까? sharedpreferences에 selecteditem의 값을 저장하고 싶습니다. – HeartlessArchangel

9

당신은 목록보기에서 선택한 항목의 목록을 가져 getCheckedItemIds() 또는 getCheckedItemPositions()를 사용할 수 있습니다. 먼저 대화 상자의 목록보기를 가져 오려면 AlertDialog.getListView()을 사용해야합니다.

mAlert.getListView().getCheckedItemPositions(); 
0

저장 효율성을 위해 부울 배열을 기본 설정으로 저장하기 전에 정수로 변환 할 수 있습니다. 그러나 AlertDialog 목록을 초기화하는 부울 배열은 AlertDialog의 부울 배열 결과의 역순으로 존재합니다. (OS2.6.6 및 4.2.2에서 일관된 반전이 일어난다. 다른 버전은 확인하지 않았다.)

관련 문제