Как удалить дубликаты с счетчика в android

Код для счетчика приведен ниже. Счетчики в моем приложении имеют тенденцию дублировать его содержимое иногда по какой-то странной причине. Как мне этого не допустить ?:

Spinner spinnerG = (Spinner) findViewById(R.id.spGroup);
    final ArrayAdapter<String> dataAdapterG = new ArrayAdapter<>
            (this, R.layout.simple_spinner_item, groups);
    dataAdapterG.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);
    spinnerG.setAdapter(dataAdapterG);                                   //general basics       //sets up the group spinner, filled with the groups list

    spinnerG.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
        {
            selectedGroup = groups.get(position);
            studentsToShow.clear();
            for(int i = 0; i < studList.size(); i++){
                if (studList.get(i).getGroup().equals(selectedGroup)){
                    Students a = new Students();
                    a.setFirstName(studList.get(i).getFirstName());
                    a.setLastName(studList.get(i).getLastName());
                    a.setStudentID(studList.get(i).getStudentID());
                    a.setGroup(studList.get(i).getGroup());
                    studentsToShow.add(a);                                                      //when a new group is chosen the list of students in the selected group needs to be updated
                }                                                                               //this re uses the code earlier to make a list of student in the selected group
            }
            updateSpS();                                                                        //updates the student spinner
        }
        public void onNothingSelected(AdapterView<?> parent){
        }
    });

для какого обратного вызова жизненного цикла Activity / Fragment вы установили этот Spinner?

Jojo Narte 11.07.2018 04:09

Сделайте это перед обновлением счетчика: 1- Create -> HashSet <Students> hashSet = new HashSet <> (); 2- Добавьте все элементы в hashSet -> hashSet.addAll (studentToShow); 3- Очистить список -> studentToShow.clear (); 4- Добавьте hashSet в список -> studentToShow.addAll (hashSet); 5- Вызов spinnerAdapter.notifyDataSetChanged ();

Aaeb 10.12.2019 13:21
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
546
2

Ответы 2

Счетчик будет дублироваться, если вы поместили это событие oncreate. Поместите код популяции счетчика на метод onResume.

Из фрагмента, к которому был подан вопрос, трудно догадаться, почему OP может иметь повторяющееся значение. Обоснованное предположение состоит в том, что его onItemSelected () вызывается несколько раз.

Spinner's (на мой взгляд, это один из худших виджетов для Android) onItemSelected() можно вызывать несколько раз по разным причинам, одна из вещей, которые я бы рекомендовал попробовать таким образом -

class SpinnerInteractionListener implements AdapterView.OnItemSelectedListener, View.OnTouchListener {

        boolean userSelect = false;

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            userSelect = true;
            return false;
        }

        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
            if (userSelect) {
                // Your selection handling code here
                userSelect = false;
                if (view!=null){
                    selectedGroup = groups.get(position);
                    studentsToShow.clear();
                    for(int i = 0; i < studList.size(); i++){
                        if (studList.get(i).getGroup().equals(selectedGroup)){
                            Students a = new Students();
                            a.setFirstName(studList.get(i).getFirstName());
                            a.setLastName(studList.get(i).getLastName());
                            a.setStudentID(studList.get(i).getStudentID());
                            a.setGroup(studList.get(i).getGroup());
                            studentsToShow.add(a);                                                      //when a new group is chosen the list of students in the selected group needs to be updated
                        }                                                                               //this re uses the code earlier to make a list of student in the selected group
                    }
                    updateSpS();                                                                        //updates the student spinner
                }
            }
        }
    }

А затем установите -

SpinnerInteractionListener listener = new SpinnerInteractionListener();
spinnerG.setOnTouchListener(listener);
spinnerG.setOnItemSelectedListener(listener);

Это в то же время заботится о нежелательных обратных вызовах onItemSelected () без вмешательства пользователя и в случае каких-либо предыдущих просочившихся слушателей.

Да, у меня есть 3 прядильщика в одном действии, если это помогает в вопросе, все дублируются после многократного открытия счетчика

Victor 11.07.2018 11:13

Это помогло? @Виктор?

Amit K. Saha 11.07.2018 15:07

вы набираете студентов в каждом из них?

Amit K. Saha 11.07.2018 18:41

Привет, Амит, я попробую и дам тебе знать

Victor 11.07.2018 18:48

Другие вопросы по теме