8

Tôi đang cố tạo một tùy chọn AlertDialog với nhiều lựa chọn. Tôi đã thử với setMultiChoiceItems nhưng những gì tôi có là một ArrayList<Category> và không phải là CharSequence vì vậy tôi đã thử với bộ điều hợp.Nhiều tùy chọn AlertDialog với Bộ điều hợp tùy chỉnh

Sự cố với setAdapter là khi tôi chọn một mục, nó sẽ đóng cửa sổ hộp thoại. Và những gì tôi muốn là chọn các mục và sau đó nhấn nút OK để xem những mục nào được chọn.

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("Pick a color"); 
     ArrayAdapter<Category> catsAdapter = new ArrayAdapter<Category>(this, android.R.layout.select_dialog_multichoice,this.categories); 
     builder.setAdapter(catsAdapter, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int item) { 

      } 
     }); 
     builder.setPositiveButton("Save", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
       //do something 
       }     
     });; 

     AlertDialog alert = builder.create(); 
     alert.show(); 
+0

Tại sao không tự động tạo chế độ xem tùy chỉnh với các nút radio được điền bởi ArrayList của bạn? Bạn có thể đặt chế độ xem tùy chỉnh cho hộp thoại cảnh báo, sau đó manaully kiểm tra các bức tượng hộp trong setPositiveButton –

+0

Tôi muốn mã của bộ điều hợp. Bạn có thể cho tôi không? – offset

Trả lời

0

xem mã bên dưới có thể giúp bạn. tôi đã sử dụng nó trong ứng dụng của mình.

public static ArrayList<String> Party_list_new = new ArrayList<String>(); 

ArrayList<String> party_multi_cheked = new ArrayList<String>(); 

public void show_alert() { 

     final Dialog dia = new Dialog(this); 
     dia.setContentView(R.layout.alert_); 
     dia.setTitle("Select File to import"); 
     dia.setCancelable(true); 

     final ListView list_alert = (ListView) dia 
       .findViewById(R.id.alert_list); 

     list_alert.setAdapter(new ArrayAdapter<String>(getApplicationContext(), 
       android.R.layout.simple_list_item_multiple_choice, 
       Party_list_new)); 

     list_alert.setItemsCanFocus(false); 
     list_alert.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
     list_alert.setOnItemClickListener(new OnItemClickListener() { 

      public void onItemClick(AdapterView<?> arg0, View arg1, int pos, 
        long arg3) { 

      } 
     }); 

     Button btn = (Button) dia.findViewById(R.id.button1); 
     btn.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 

       SparseBooleanArray positions = list_alert 
         .getCheckedItemPositions(); 
       int j = 0; 

       for (int k = 0; k < Party_list_new.size(); k++) { 
        if (positions.get(k)) { 

         party_multi_cheked.add("" + k); 


        } 
       } 

       dia.dismiss(); 
      } 
     }); 
     dia.show(); 

    } 

alert_list.xml

<?xml version="1.0" encoding="UTF-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/linearLayout1" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical" > 
     <Button 
      android:id="@+id/button1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="Select Party" /> 

     <ListView 
      android:id="@+id/alert_list" 
      android:layout_width="match_parent" android:padding="5dp" 
      android:layout_height="wrap_content" > 
     </ListView> 

    </LinearLayout> 

làm cho nó đúng nếu nó là đúng.

+0

Không chính xác những gì tôi muốn, bởi vì nó "phá vỡ" phong cách của AlertDialog khác mà tôi có. –

1

điều này sẽ dừng hộp thoại ur khỏi biến mất sau một lựa chọn.

AlertDialog alertDialog = builder.create(); 
ListView listView = alertDialog.getListView(); 
listView.setOnItemClickListener(new OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, 
      int position, long id) { 
     // TODO Auto-generated method stub 

    } 
}); 

Để chọn mục nào được chọn, bạn cần lập kế hoạch bộ điều hợp cho phù hợp.

26

Thật không may, dường như không có cách nào dễ dàng để chuyển đổi trên multichoicemode của AlertDialog mà không cần gọi setMultiChoiceItems().

Tuy nhiên, bạn có thể đặt bộ điều hợp, sau đó bật chế độ đa hóa trong chính bản thân có chứa ListView.

final AlertDialog dialog = new AlertDialog.Builder(getActivity()) 
    .setTitle("Title") 
    .setAdapter(yourAdapter, null) 
    .setPositiveButton(getResources().getString(R.string.positive), null) 
    .setNegativeButton(getResources().getString(android.R.string.cancel), null) 
    .create(); 

dialog.getListView().setItemsCanFocus(false); 
dialog.getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
dialog.getListView().setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, 
     int position, long id) { 
     // Manage selected items here 
     System.out.println("clicked" + position); 
     CheckedTextView textView = (CheckedTextView) view; 
     if(textView.isChecked()) { 

     } else { 

     } 
    } 
}); 

dialog.show(); 
Các vấn đề liên quan