Подтвердить что ты не робот

Переключение флажков в MultiChoice AlertDialog в android

Привет,

Я создал MultiChoice AlertDialog В AlertDialog есть пять список элементов с флажками. Когда я установите флажок "Сначала", w.r.t. если другие флажки в списке проверяются, чтобы они не были удалены автоматически и наоборот.

Я проверяю статус isCheckedв методе onClick OnMultiChoiceClickListener() и вызов showDialog (DIALOG_MULTIPLE_CHOICE);, обновив boolean [] checkedItems;, чтобы воссоздать Диалог, но я не могу этого добиться. Если у вас есть предложения, пожалуйста, направляйте меня на правильном пути.

Есть ли способ воссоздать событие AleartDialog onClick щелчка переключателя.

Пример кода ниже:

case DIALOG_MULTIPLE_CHOICE:
final String[] lJobTypes = { "Item1", "Item2", "Item3","Item4", "Item5" };
    return new AlertDialog.Builder(JoblistPage.this)
    // .setIcon(R.drawable.logo)
    .setTitle("Title Here")
    // .setCustomTitle(m_Title)
    .setMultiChoiceItems(lTypes, m_Selections,
        new DialogInterface.OnMultiChoiceClickListener() {

            public void onClick(DialogInterface dialog,int whichButton, boolean isChecked) {
                /* User clicked on a check box do some stuff */
                if (isChecked) {
                    m_CheckCount++;
                    //Toggle the Radio button Check status
                } else {
                    m_CheckCount--;
                }
                                                }
        }).setPositiveButton("Ok",
        new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface dialog,
                    int whichButton) {
                    }
                }).create();

Отношения Винаяк

4b9b3361

Ответ 1

Не воссоздавайте диалог, просто установите флажки в текущем диалоговом окне. Ваш onMultiChoiceClickListener может отслеживать текущий активный флажок (если есть) и снимите его, когда выбрано другое. Здесь приведен полный рабочий пример:

package com.stackoverflow.beekeeper;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.DialogInterface.OnMultiChoiceClickListener;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.Toast;

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

  private int mSelected = -1;

  @Override protected void onResume() {
    super.onResume();
    final Builder build = new Builder(this);
    build.setTitle("List selection");
    build.setCancelable(true);
    final String[] strings = new String[]{"Cow", "Horse", "Goat"};
    final OnMultiChoiceClickListener onClick =
      new OnMultiChoiceClickListener() {
        @Override public void onClick(final DialogInterface dialog,
                                      final int which, final boolean isChecked) {

          if (isChecked) {
            if ((mSelected != -1) && (mSelected != which)) {
              final int oldVal = mSelected;
              final AlertDialog alert = (AlertDialog)dialog;
              final ListView list = alert.getListView();
              list.setItemChecked(oldVal, false);
            }
            mSelected = which;
          } else
            mSelected = -1;
        }
      };
    build.setMultiChoiceItems(strings, null, onClick);
    build.setPositiveButton("Done", new OnClickListener() {
      @Override public void onClick(final DialogInterface dialog,
                                    final int which) {
        String message = null;
        if (mSelected == -1)
          message = "You didn't select anything.";
        else
          message = "You selected '" + strings[mSelected] + "'";
        Toast.makeText(StackOverflowTest.this, message, Toast.LENGTH_LONG).show();
      }
    });
    build.show();
  }
}

Одна вещь, на которую нужно обратить внимание: вы должны указать "null" для параметра "checkedItems" в вашем вызове "setMultiChoiceItems" - иначе вызовы "setItemChecked" не будут работать должным образом. В итоге этот массив будет использоваться для хранения проверенного состояния, а "setItemChecked" не будет корректно обновлять его, поэтому все будет запутано. Нечетный, но верно.

Ответ 2

Я боролся с этим довольно долгое время. Я поддерживаю массив "проверенного" состояния каждого из элементов и изменяю это значение при визуальном изменении значения setItemChecked. Затем, когда нажата кнопка "done", я повторяю "checked", чтобы сохранить значения в моем db.

builder.setMultiChoiceItems(cats, checked, new DialogInterface.OnMultiChoiceClickListener() {
        public void onClick(DialogInterface dialog, int item, boolean check) {
            if(cats[item].equals("All Categories")) {
                AlertDialog d = (AlertDialog) dialog;
                ListView v = d.getListView();
                int i = 0;
                while(i < cats.length) {
                    v.setItemChecked(i, check);
                    checked[i] = check;
                    i++;
                }
            }
            checked[item] = check;
        }
    });

Ответ 3

Вы пытались заменить setMultiChoiceItems на setSingleChoiceItems в своем диалоговом окне?