Come faccio a controllare su MultiChoice AlertDialog

Sto utilizzando la window di dialogo nella mia applicazione per consentire all'utente di effettuare più selezione, Ecco il mio codice:

btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Build an AlertDialog AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); // String arrays for alert dialog multi choice items String[] colors = new String[]{ "Red", "Green", "Blue", "Purple", "Olive" }; // Boolean arrays for initial selected items final boolean[] checkedColors = new boolean[]{ false, // Red false, // Green false, // Blue false, // Purple false // Olive }; // Convert the color arrays to list final List<String> colorsList = Arrays.asList(colors); // Set multiple choice items for alert dialog builder.setMultiChoiceItems(colors, checkedColors, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { // Update the current focused item's checked status checkedColors[which] = isChecked; // Get the current focused item String currentItem = colorsList.get(which); // Notify the current action Toast.makeText(getApplicationContext(), currentItem + " " + isChecked, Toast.LENGTH_SHORT).show(); } }); // Specify the dialog is not cancelable builder.setCancelable(false); // Set a title for alert dialog builder.setTitle("Your preferred colors?"); // Set the positive/yes button click listener builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // Do something when click positive button tv.setText("Your preferred colors..... \n"); for (int i = 0; i<checkedColors.length; i++){ boolean checked = checkedColors[i]; if (checked) { tv.setText(tv.getText() + colorsList.get(i) + ", "); } } } }); // Set the negative/no button click listener builder.setNegativeButton("No", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // Do something when click the negative button } }); // Set the neutral/cancel button click listener builder.setNeutralButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // Do something when click the neutral button } }); AlertDialog dialog = builder.create(); // Display the alert dialog on interface dialog.show(); } }); 

E ho due domande:

  • ViewPager con frammenti - onPause (), onResume ()?
  • Come cenralizzare l'ultima fila irregolare in GridView in android?
  • Aggiunta di text a ImageView in Android
  • Come evidenziare l'elemento selezionato in ListView?
  • Il servizio di accessibilità di Android rileva la notifica
  • Applicazione dialer di Android
    1. Come ho scelto Rosso e Viola

      (quindi in TextView ottenendo l'output come questo: Red, Purple, )

      Prima di tutto vorrei rimuovere la virgola (che ottiene con l'ultimo valore)

    2. Ho già selezionato Rosso e Viola, quando ho aperto la window di dialogo che non ottiene rosso e viola selezionata per impostazione predefinita (Come posso salvare lo stato) enter code here e, di conseguenza, quando selezionerò nuovamente questi (rosso e viola) due elementi, ottenendo each elemento due volte in un TextView

  • Modificare il colore dell'icona indicatore del cassetto di navigazione
  • L'applicazione non può essere aperta con l'errore nell'apertura del file di traccia
  • Android OverlayItem.setMarker (): modifica il marcatore di un elemento
  • Come recuperare un insieme di posizioni in un determinato intervallo dalla posizione dell'utente dal database SQLite
  • Aggiungere il button Exit per l'applicazione Android chiamando una function da un'attività
  • Come convertire un LatLng e un raggio in un LatLngBounds in Android Google Maps API v2?
  • 2 Solutions collect form web for “Come faccio a controllare su MultiChoice AlertDialog”

    Prova a aggiornare la tua visualizzazione di text dopo il ciclo

    E se l'iterazione del ciclo raggiunge la lunghezza dei checkedcolors allora donot aggiunge una virgola.

     public void onClick(DialogInterface dialog, int which) { // Do something when click positive button tv.setText("Your preferred colors..... \n"); for (int i = 0; i < checkedColors.length; i++) { boolean checked = checkedColors[i]; String colors = ""; if (checked) { colors = colors + colorsList.get(i) ; if (i != checkedColors.length - 1) { colors = colors + ", "; } } } tv.setText(tv.getText() + colors); } 

    La visualizzazione di text di Yor sarà aggiornata una sola volta, quindi non dovrai ricevere each elemento due volte nel TextView.

    Per salvare lo stato è necessario utilizzare SharedPreference .

    Per il salvataggio in preferenza utilizzare questo

      SharedPreferences preferences = mContext.getSharedPreferences("PREFERENCE_NAME", Context.MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.putBoolean("yourColor",isChecked); editor.commit(); 

    E per recuperare

      boolean isChecked = preferences.getBoolean("yourColor"); 

    Prova questo e migliora la struttura del tuo codice in modo che possa essere gestita in modo efficiente.

     import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { private Button btn; private TextView txtSelected; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn = (Button) findViewById(R.id.btn_dialog); txtSelected = (TextView) findViewById(R.id.txt_selected); final ArrayList<ColorVO> colorList = new ArrayList<ColorVO>(); // String arrays for alert dialog multi choice items final String[] colors = new String[]{ "Red", "Green", "Blue", "Purple", "Olive" }; // Boolean arrays for initial selected items final boolean[] checkedColors = new boolean[]{ false, // Red false, // Green false, // Blue false, // Purple false // Olive }; btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); // make a list to hold state of every color for (int i = 0; i < colors.length; i++) { ColorVO colorVO = new ColorVO(); colorVO.setName(colors[i]); colorVO.setSelected(checkedColors[i]); colorList.add(colorVO); } // Do something here to pass only arrayslist on this both arrayss ('colors' & 'checkedColors') builder.setMultiChoiceItems(colors, checkedColors, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { // set state to vo in list colorList.get(which).setSelected(isChecked); Toast.makeText(getApplicationContext(), colorList.get(which).getName() + " " + isChecked, Toast.LENGTH_SHORT).show(); } }); builder.setCancelable(false); builder.setTitle("Your preferred colors?"); builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { txtSelected.setText("Your preferred colors..... \n"); // save state of selected vos ArrayList<ColorVO> selectedList = new ArrayList<>(); for (int i = 0; i < colorList.size(); i++) { ColorVO colorVO = colorList.get(i); colors[i] = colorVO.getName(); checkedColors[i] = colorVO.isSelected(); if (colorVO.isSelected()) { selectedList.add(colorVO); } } for (int i = 0; i < selectedList.size(); i++) { // if element is last then not attach comma or attach it if (i != selectedList.size() - 1) txtSelected.setText(txtSelected.getText() + selectedList.get(i).getName() + " ,"); else txtSelected.setText(txtSelected.getText() + selectedList.get(i).getName()); } colorList.clear(); } }); builder.setNegativeButton("No", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // make sure to clear list that duplication dont formsd here colorList.clear(); } }); builder.setNeutralButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // make sure to clear list that duplication dont formsd here colorList.clear(); } }); AlertDialog dialog = builder.create(); dialog.show(); } }); } private class ColorVO { private String name; private boolean selected; public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean isSelected() { return selected; } public void setSelected(boolean selected) { this.selected = selected; } } 

    Risolto tutte le tue query:

    1. Come ho selezionato Rosso e Viola

    => Controlla l'indice dell'elemento, se è ultimo non associare virgola.

    2. Ho già selezionato Rosso e Viola, quando apro ancora una window di dialogo che non ottiene rosso e viola come selezionato di default (Come posso salvare lo stato)

    => salva lo stato utilizzando vo nell'arrays predefinito. Sarà salvato finché la tua attività non viene distrutta.

    3. quando sono di nuovo selezionando questi (Rosso e Viola) due elementi, ottenendo each elemento due volte in un TextView

    => Elimina l'elenco in modo che i valori non vengano duplicati.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.