2010-06-11 4 views
5

내 앱에서는 ListActivity에서 긴 클릭으로 상황에 맞는 메뉴를 표시합니다. 옵션 중 하나 인 "우선 순위"는 AlertDialog에 3 개의 라디오 버튼 선택 항목을 표시합니다. 문제는 3 번 선택 항목이없는 빈 대화 상자 또는 설정 한 메시지가 표시된다는 것입니다. 내가 대신 긍정적이고 부정적인 버튼으로 .setSingleChoiceItems를 교체 할 경우 여기에 내 코드 ..Android AlertDialog가 라디오 버튼이나 메시지를 표시하지 않습니다.

protected Dialog onCreateDialog(int id) { 
    AlertDialog dialog; 
    switch(id) { 
    case DIALOG_SAB_PRIORITY_ID: 
     final CharSequence[] items = {"High", "Normal", "Low"}; 

     AlertDialog.Builder builder = new AlertDialog.Builder(SabMgmt.this); 
     builder.setMessage("Select new priority") 
       .setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int item) { 
       Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     dialog = builder.create();    
     break; 
    default: 
     dialog = null; 
    } 
    return dialog; 
} 

는 예상대로 버튼과 메시지를 표시합니다. 라디오 버튼 목록을 설정할 때 내가 뭘 잘못하고 있니? 여기 내 전화 번호도 있습니다 ..

public boolean onContextItemSelected(MenuItem item) { 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
    switch (item.getItemId()) { 
    case R.id.sabdelete: 
     // Correct position (-1) for 1 header 
     final SabQueueItem qItem = (SabQueueItem) itla.getItem(info.position-1); 
     SabNZBdUtils.deleteItem(qItem.getNzo_id()); 
     getQueue(); 
     ListView lv = getListView(); 
     View v = lv.findViewById(R.id.sablistheader); 
     setHeader(v); 
     itla.notifyDataSetChanged(); 
     return true; 
    case R.id.sabpriority: 
     showDialog(DIALOG_SAB_PRIORITY_ID); 
     return true; 
    default: 
     return super.onContextItemSelected(item); 
    } 
} 

답변

22

알아 냈어! builder.setTitle 대신 singleChoiceItem 대화 상자에서 builder.setMessage를 사용하고있었습니다. 라디오 버튼 선택을 사용하는 대화 상자는 메시지 설정과 제목 만 지원하는 것 같지 않습니다. 방법이 제공되는 이상한 것 같다. 어쨌든, 다음은 작동 코드입니다.

protected Dialog onCreateDialog(int id) { 
    AlertDialog dialog; 
    switch(id) { 
    case DIALOG_SAB_PRIORITY_ID: 
     final CharSequence[] items = {"High", "Normal", "Low"}; 

     AlertDialog.Builder builder = new AlertDialog.Builder(SabMgmt.this); 
     builder.setTitle("Select new priority") 
       .setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int item) { 
       Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     dialog = builder.create(); 
     break; 
    default: 
     dialog = null; 
    } 
    return dialog; 
+2

고마워요! 방금 내 경보 대화 상자가 비어있는 이유를 알아 내려고 한시간 동안 벽에 머리를 두드렸다. – seanalltogether

+0

고마워. 이건 미친 짓이야. 이것은 어딘가에서 문서화 될 수 있습니다. – njzk2

+0

탱크! 나는이 버그를 찾는 데 미쳤다! –

관련 문제