2012-11-22 1 views
3

여러 선택 대화 상자에 대한 android 문서를 따르려고합니다. 나는 문제가 있어요, 나는 그것이 내가에로드하기 위해 노력하고있어 배열의 종류에 생각 이상 Android : 대화 상자 작성기 다중 선택 설정 배열

public void addCondition(View view){ 

     ArrayList<String> mHelperNames= new ArrayList<String>(); 
      mHelperNames.add("Test Item"); 
      mHelperNames.add("Test Item"); 
      mHelperNames.add("Test Item"); 


      mSelectedItems = new ArrayList(); 

      AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setTitle("My Title") 
        .setMultiChoiceItems(mHelperNames, null, 
           new DialogInterface.OnMultiChoiceClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which, 
           boolean isChecked) { 
          if (isChecked) { 

           mSelectedItems.add(which); 
          } else if (mSelectedItems.contains(which)) { 

           mSelectedItems.remove(Integer.valueOf(which)); 
          } 
         } 
        }) 

        .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int id) { 
          //Create onlcick method 
         } 
        }) 
        .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int id) { 
          //Create onlcick method 
         } 
        }); 
      builder.show(); 

    } 

내 코드이지만, 일식 빨간색 줄 도시입니다 :.

enter image description here

docs에서 mSelectedItems는 절대로 선언되지 않으며, 내가 무엇을 선언했는지 확신 할 수 없습니다.

.SetMultipleChoiceItems에 오류 :

메소드되는 setMulti (INT는 부울 [] DialogInterface.OnMultiChoiceClickListener) 타입에 AlertDialog.Builder의 인수 (ArrayList를 널 새로운 DialogInterface.OnMultiChoiceClickListener 적용 아니다() {})

하지만 문자열에서 변경하면 텍스트 항목을 어떻게 표시합니까? 어떤 도움이라도 대단히 감사하겠습니다.

답변

6

당신은 CharSequence[]setMultiChoiceItems에 방법이 아닌 ArrayList를 제공해야합니다.

당신은이 같은 mHelperNames 만들 수

:

CharSequence[] mHelperNames = new CharSequence[] { "test item 1", "test item 2" }; 

을 너무 mSelectedItems를 선언하는 것을 잊지 마세요 :

final List<Integer> mSelectedItems = new ArrayList<Integer>(); 

(당신이 내부 클래스에서 액세스하기 때문에 최종이어야한다)

나중에 수정할 필요가있는 경우 mHelperNames을 ArrayList로 유지할 수도 있습니다. 그런 다음 배열로 변환하면 setMultiChoiceItems :

List<CharSequence> mHelperNames = new ArrayList<CharSequence>(); 
    mHelperNames.add("Test Item 1"); 
    mHelperNames.add("Test Item 2"); 

    final List<Integer> mSelectedItems = new ArrayList<Integer>(); 

    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle("My Title") 
      .setMultiChoiceItems(mHelperNames.toArray(new CharSequence[mHelperNames.size()]), null, 
        new DialogInterface.OnMultiChoiceClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, 
           int which, boolean isChecked) { 
          if (isChecked) { 

           mSelectedItems.add(which); 
          } else if (mSelectedItems.contains(which)) { 

           mSelectedItems.remove(Integer 
             .valueOf(which)); 
          } 
         } 
        }) 
+2

언제든지 내 집에서 저녁 식사를 환영합니다. 고맙습니다. 한 가지 간단한 질문은 처음부터 정적 목록이 아닌 다른 곳에서 어떤 방법으로 추가 할 수 있을까요? – TMB87

+0

내 편집을 참조하십시오. 추신 : 나는 닭 튀김을 좋아한다 – fiddler

+0

이것은 매우 아름답고 고마워! – AimanB