onItemClick ListView Listener не входит в первый раз - PullRequest
0 голосов
/ 20 октября 2018

У меня проблема в методе onCreateView, у меня есть фрагмент, который имеет кнопку с именем: variableButton , каждый раз, когда я нажимаю на него, он создает AlertDialog , в котором яиспользуйте setMultiChoiceItems для отображения определенных элементов.Я пытаюсь создать Выбрать все в первом указателе, чтобы выбрать все элементы в диалоге или отменить их выбор.

Когда я нажимаю первый раз, это не работает, нопосле второго щелчка по нему он работает (наконец, введя метод onItemClick).Я уже пытался установить Focus для списка, также FOCUS_BLOCK_DESCENDANTS, но он не войдет в первый раз, когда я нажму, как я могу решить это?.

variablesButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            AlertDialog.Builder mBuilder = new AlertDialog.Builder(getContext());
            mBuilder.setTitle("Sensors");


            mBuilder.setCancelable(false);
            mBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    listSensors.clear();
                    for (int a=0; a<checkedItems.length; a++) {
                        if (checkedItems[a])
                            listSensors.add(sensorNames[a]);
                    }
                }
            });

            mBuilder.setMultiChoiceItems(sensorNames, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                    checkedItems[which] = isChecked;
                    Log.i("checked", String.valueOf(which));

                    final ListView listView = ((AlertDialog) dialog).getListView();
                    listView.setFocusable(false);
                    listView.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
                    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                        @Override
                        public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
                            boolean isChecked = listView.isItemChecked(pos);
                            Log.i("pos", String.valueOf(pos));
                            if (pos == 0) {
                                for (int i = 1; i < checkedItems.length; i++) { // we start with first element after "Select all" choice
                                    if (isChecked && !listView.isItemChecked(i) || !isChecked && listView.isItemChecked(i)) {
                                        listView.performItemClick(listView, i, 0);
                                    }
                                }
                            }
                        }
                    });
                }
            });

            mBuilder.create();
            mBuilder.show();
        }
    });

1 Ответ

0 голосов
/ 20 октября 2018

Ваш AdapterView.OnItemClickListener() находится внутри variablesButton.setOnClickListener, поэтому прослушиватель AdapterView устанавливается после того, как обработчик переменных щелкните один раз.И установите AdapterView.OnItemClickListener() во время инициализации действия или инициализации соответствующего содержимого.

...