2011-11-21 4 views
1

여러 선택 확인란의 데이터로 사용되는 요소의 char 배열을 가진 경고 상자를 작성합니다. 내 질문은 선택한 항목 순서에 따라이 경고 상자에 1,2,3으로 값을 반환하는 방법입니까? 즉. 내가 mercur와 venus를 선택하면 나는 1,2로 값을 얻어야한다. 어떻게 구현합니까? for 루프로 시도한 후에 볼 수 있듯이 이제는 어느 체크 박스가 체크되어 있는지를 보여주고 있습니다. 도와주세요!경고 상자에서 선택한 다중 항목에 정수 값을 반환하는 방법은 무엇입니까?

public class MultiActivity extends Activity { 
    protected CharSequence[] _options = { "Mercury", "Venus", "Earth", "Mars", 
    "Jupiter", "Saturn", "Uranus", "Neptune" }; 
    protected boolean[] _selections = new boolean[ _options.length ]; 

protected Button _optionsButton; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    _optionsButton = (Button) findViewById(R.id.button1); 
    _optionsButton.setOnClickListener(new ButtonClickHandler() ); 
} 


public class ButtonClickHandler implements View.OnClickListener { 
    public void onClick(View view) { 
     showDialog(0); 
    } 
} 

@Override 
protected Dialog onCreateDialog(int id) 
{ 
    return 
    new AlertDialog.Builder(this) 
     .setTitle("Planets") 
     .setMultiChoiceItems(_options, _selections, new DialogSelectionClickHandler()) 
     .setPositiveButton("OK", new DialogButtonClickHandler()) 
     .create(); 
} 

public class DialogSelectionClickHandler implements DialogInterface.OnMultiChoiceClickListener 
{ 
    public void onClick(DialogInterface dialog, int clicked, boolean selected) 
    { 
     Log.i("ME", _options[ clicked ] + " selected: " + selected); 
    } 
} 
public class DialogButtonClickHandler implements DialogInterface.OnClickListener 
{ 
    public void onClick(DialogInterface dialog, int clicked) 
    { 
     switch(clicked) 
     { 
      case DialogInterface.BUTTON_POSITIVE: 
       printSelectedPlanets(); 
       break; 
     } 
    } 
} 

protected void printSelectedPlanets(){ 
    for(int i = 0; i < _options.length; i++){ 
     Log.i("ME", _options[ i ] + " selected: " + _selections[i]); 
     String abc = _options[ i ] + " selected: " + _selections[i]; 
     TextView ab = (TextView)findViewById(R.id.textView1); 
     ab.setText(abc); 
     System.out.print(abc); 

    } 
} 

}는 내가 아래에 언급 된 코드를 실행하려고 할 때 난 내 로그 캣에 인쇄 된 아래의 오류가 발생했습니다 참조하십시오.

11-21 14:23:59.905: E/AndroidRuntime(439): FATAL EXCEPTION: main 11-21 14:23:59.905: E/AndroidRuntime(439): java.lang.NullPointerException 11-21 14:23:59.905: E/AndroidRuntime(439): at com.workspace.multi.peek$2.onClick(peek.java:47) 11-21 14:23:59.905: E/AndroidRuntime(439): at com.android.internal.app.AlertController$AlertParams$4.onItemClick(AlertController.java:886) 11-21 14:23:59.905: E/AndroidRuntime(439): at android.widget.AdapterView.performItemClick(AdapterView.java:284) 11-21 14:23:59.905: E/AndroidRuntime(439): at android.widget.ListView.performItemClick(ListView.java:3382) 11-21 14:23:59.905: E/AndroidRuntime(439): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1696) 11-21 14:23:59.905: E/AndroidRuntime(439): at android.os.Handler.handleCallback(Handler.java:587) 11-21 14:23:59.905: E/AndroidRuntime(439): at android.os.Handler.dispatchMessage(Handler.java:92) 11-21 14:23:59.905: E/AndroidRuntime(439): at android.os.Looper.loop(Looper.java:123) 11-21 14:23:59.905: E/AndroidRuntime(439): at android.app.ActivityThread.main(ActivityThread.java:4627) 11-21 14:23:59.905: E/AndroidRuntime(439): at java.lang.reflect.Method.invokeNative(Native Method) 11-21 14:23:59.905: E/AndroidRuntime(439): at java.lang.reflect.Method.invoke(Method.java:521) 11-21 14:23:59.905: E/AndroidRuntime(439): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 11-21 14:23:59.905: E/AndroidRuntime(439): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 11-21 14:23:59.905: E/AndroidRuntime(439): at dalvik.system.NativeStart.main(Native Method) 11-21 14:33:05.145: D/AndroidRuntime(495): Shutting down VM 11-21 14:33:05.145: W/dalvikvm(495): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 11-21 14:33:05.166: E/AndroidRuntime(495): FATAL EXCEPTION: main 11-21 14:33:05.166: E/AndroidRuntime(495): java.lang.NullPointerException 11-21 14:33:05.166: E/AndroidRuntime(495): at com.workspace.multi.MultiActivity$1.onClick(MultiActivity.java:51) 11-21 14:33:05.166: E/AndroidRuntime(495): at com.android.internal.app.AlertController$AlertParams$4.onItemClick(AlertController.java:886) 11-21 14:33:05.166: E/AndroidRuntime(495): at android.widget.AdapterView.performItemClick(AdapterView.java:284) 11-21 14:33:05.166: E/AndroidRuntime(495): at android.widget.ListView.performItemClick(ListView.java:3382) 11-21 14:33:05.166: E/AndroidRuntime(495): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1696) 11-21 14:33:05.166: E/AndroidRuntime(495): at android.os.Handler.handleCallback(Handler.java:587) 11-21 14:33:05.166: E/AndroidRuntime(495): at android.os.Handler.dispatchMessage(Handler.java:92) 11-21 14:33:05.166: E/AndroidRuntime(495): at android.os.Looper.loop(Looper.java:123) 11-21 14:33:05.166: E/AndroidRuntime(495): at android.app.ActivityThread.main(ActivityThread.java:4627) 11-21 14:33:05.166: E/AndroidRuntime(495): at java.lang.reflect.Method.invokeNative(Native Method) 11-21 14:33:05.166: E/AndroidRuntime(495): at java.lang.reflect.Method.invoke(Method.java:521) 11-21 14:33:05.166: E/AndroidRuntime(495): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 11-21 14:33:05.166: E/AndroidRuntime(495): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 11-21 14:33:05.166: E/AndroidRuntime(495): at dalvik.system.NativeStart.main(Native Method)

답변

3

확인이 ...

ArrayList<Integer> pos=new ArrayList<Integer>(); 
final CharSequence str[]={"Android","Black Berry","Iphone"}; 
    private void MultipleChoiceSpinner() { 
     // TODO Auto-generated method stub 


     AlertDialog.Builder builder=new AlertDialog.Builder(TestGalleryActivity.this).setMultiChoiceItems(str, default_selected, new DialogInterface.OnMultiChoiceClickListener() 
     { 

      @Override 
      public void onClick(DialogInterface dialog, int which, boolean isChecked) 
      { 
      if(isChecked) 
      { 
       pos.add(which); 
       default_selected[which]=true; 
      } 
       else{ 
        pos.remove(pos.indexOf(which)); 
        default_selected[which]=false; 
       } 


      } 
     }).setTitle("Select Any"); 
     builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       Toast.makeText(TestGalleryActivity.this, "Selected positions:"+pos.toString(), Toast.LENGTH_SHORT).show(); 
      } 
     }); 
     d=builder.create(); 
     d.show(); 

    } 

안녕하세요, 난 그냥 경고 상자 here의 두 가지 유형을 추가하고있다. 나는 그것이 누군가에게 유용 할 것이기를 희망한다.

+0

정수 배열을 사용하여 bulid하고 싶지 않은 것을 참조하십시오. 나는 문자열이나 char 배열을 원한다. 나는 원하는 모든 값을 수성, 금성 같은 String으로 선택하고, 또한 위치 2,4로 Integer를 원하는 값을 원한다. – Froyo

+0

위치가있는 정수 배열이 있으므로 값을 가져와야합니다. for (int p : pos) {String s = str [p] .toString(); } // 여기서 p는 위치이고, str은 Charsequence array ...입니다. –

관련 문제