8

के साथ एकाधिक विकल्प अलर्टडियलॉग मैं एकाधिक विकल्प विकल्प के साथ अलर्टडिअलॉग बनाने की कोशिश कर रहा हूं। मैंने setMultiChoiceItems के साथ प्रयास किया है लेकिन मेरे पास ArrayList<Category> है और CharSequence नहीं है इसलिए मैंने एडाप्टर के साथ प्रयास किया।कस्टम एडाप्टर

setAdapter के साथ समस्या यह है कि जब मैं एक आइटम का चयन करता हूं तो यह संवाद विंडो बंद कर देता है। और मैं चाहता हूं कि आइटम का चयन करें और फिर यह देखने के लिए ओके बटन दबाएं कि कौन से आइटम चुने गए हैं।

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

गतिशील रूप से अपने ऐरेलिस्ट द्वारा पॉप्युटेड रेडियो बटन के साथ कस्टम दृश्य क्यों नहीं बनाते? आप एक चेतावनी संवाद के लिए एक कस्टम दृश्य सेट कर सकते हैं, फिर सेटपॉसिटिव बटन –

+0

में बॉक्स मूर्तियों को मैन्युअल रूप से जांचें, मैं एडाप्टर का कोड चाहता हूं। क्या आप मुझे दे सकते हैं? – offset

उत्तर

0

कोड नीचे देखें यह आपकी मदद कर सकता है। मैंने इसे अपने ऐप में इस्तेमाल किया।

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> 

सही अगर यह सही है यह सुनिश्चित करें।

+0

बिल्कुल वही नहीं जो मैं चाहता हूं, क्योंकि यह मेरे पास अन्य अलर्टडिअलॉग की शैली को "तोड़ता है"। –

1

यह आपके चयन को एक चयन के बाद गायब होने से रोक देगा।

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 

    } 
}); 

कौन से आइटम चुने गए हैं, आपको तदनुसार अपने एडाप्टर की योजना बनाने की आवश्यकता है।

26

दुर्भाग्यवश, setMultiChoiceItems() पर कॉल किए बिना अलर्टडिअलॉग के मल्टीचॉइसमोड पर टॉगल करने का एक आसान तरीका प्रतीत नहीं होता है।

हालांकि, आप एडाप्टर सेट कर सकते हैं, फिर मल्टीचॉइस मोड को 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(); 
संबंधित मुद्दे