2014-04-01 2 views
3

25 가지 선택 사항이있는 MultiChoice AlertDialog가 있습니다.MultiChoice AlertDialog, Android에서 제한 선택

나는 그녀가 내가 unckeck 그녀가 할 수 5 선택하는 것이라는 토스트 메시지를 표시 할 6 선택을 선택하면 사용자는 어떤 5 25

에서 선택하도록합니다.

MultiChoice AlertDialog로 가능합니까? 도와주세요!

답변

2

정적 변수 "count"를 만들고 선택한 옵션에서 증가시키고 체크 상자의 onclick 이벤트에서 선택 해제하면 감소합니다. 다음과 같이

import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.TextView; 
import android.widget.Toast; 

public class AlertWithCheckBoxActivity extends Activity { 
    /** Called when the activity is first created. */ 
    static int count = 0; 
    final CharSequence[] items={".NET","J2EE","PHP"}; 
    boolean[] itemsChecked = new boolean[items.length]; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 
    public void showDialog(View v) 
    { 

     count = 0; 
     AlertDialog.Builder builder=new AlertDialog.Builder(this); 
     builder.setTitle("Pick a Choice"); 
     builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       String selectedTech="Selected Tech - "; 
       for (int i = 0; i < items.length; i++) { 
        if (itemsChecked[i]) { 

         selectedTech=selectedTech+items[i]+" "; 
         itemsChecked[i]=false; 
        } 
       } 
      } 
     }); 

     builder.setMultiChoiceItems(items, new boolean[]{false,false,false}, new DialogInterface.OnMultiChoiceClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int which, boolean isChecked) { 
       if(isChecked) { 
        if(count < 5) { 
         itemsChecked[which] = isChecked; 
         count++; 
        }else{ 
         //Display your toast here 
        } 
       }else{ 
        count--; 
       } 
      } 
     }); 
     builder.show(); 
    } 
} 
+0

이 좋은 답변이지만, 같은 활동의 여러 인스턴스 그렇게하고, (특정 실행 설정 주어진) 안드로이드에'카운트 가능 'static은 잠재적으로 버그 발생 가능성이 높습니다. –

+0

@ KonradMorawski 그건 아주 유효한 문제입니다. 변수 "count"를 비 정적으로 변경하여이를 방지 할 수 있습니다. – kAnNaN

+1

은 나를위한 '토스트 (toast)'를 보여주지 않습니다 ('활동'의 '컨텍스트'를 전달 중입니다). 사용자가 그 숫자 (코드에서 5)를 더 이상 선택할 수 없도록하고 싶지만 더 선택할 수 있습니다 ... 왜이 대답이 받아 들여지는지 이해할 수 없습니다. –

9

영업 이익에 대한 정확한 솔루션입니다 :

final boolean[] selected = new boolean[25]; 

builder.setMultiChoiceItems(R.array.values, selected, new DialogInterface.OnMultiChoiceClickListener() { 

    int count = 0; 

    @Override 
    public void onClick(DialogInterface dialog, int which, boolean isChecked) { 
     count += isChecked ? 1 : -1; 
     selected[which] = isChecked; 

     if (count > 5) { 
      Toast.makeText(getActivity(), "You selected too many.", Toast.LENGTH_SHORT).show(); 
      selected[which] = false; 
      count--; 
      ((AlertDialog) dialog).getListView().setItemChecked(which, false); 
     } 
    } 

});