Выбор нежелательного элемента ListView

У меня есть ListView с методом setOnItemLongClickListener. Каждый раз, когда я выбираю элементы списка, некоторые элементы списка в ListView выбираются автоматически. Вот мой код

listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                String present =listView.getItemAtPosition(position).toString();
                presentStudent.add(present);
            parent.getChildAt(position).setBackgroundColor(getResources().getColor(R.color.colorPrimary));
            return true;
        }
    });
}

как насчет настоящего студента?

HarshitMadhav 17.04.2018 17:02

@HarshitAgrawal Это список массивов. Я добавляю выбранных студентов в этот массив. а затем передать его следующему действию

aditya kumar singh 17.04.2018 17:06

Вы возвращаете true, ведь это означает, что после longClick будет вызываться "обычный" щелчок. Вы реализовали onClickListener? И почему вы звоните .getChildAt(), когда у вас уже есть View view в качестве аргумента?

Gotiasits 17.04.2018 17:08

@Gotiasits Нет. Я реализовал только onItemLongClickListener. Помогите мне, где мне реализовать OnClickListener

aditya kumar singh 17.04.2018 17:12

просто измените ItemLongClickListener на OnClickListener

HarshitMadhav 17.04.2018 17:12

@HarshitAgrawal Как мне узнать позицию элемента, по которому был выполнен щелчок.

aditya kumar singh 17.04.2018 17:20

У вас есть аргумент View view, который является элементом, по которому вы щелкнули. При необходимости просто приведите его к правильному типу.

Gotiasits 17.04.2018 17:22

@Gotiasits Я хочу отмечать посещаемость длинным щелчком и открывать сведения о студенте простым щелчком,

aditya kumar singh 17.04.2018 17:30

@adityakumarsingh в этом случае используйте OnClickListener внутри OnLongClickListener.

HarshitMadhav 17.04.2018 17:39

Проблема здесь, поскольку вы заявляете, что «некоторые элементы списка выбираются автоматически» означает, что адаптер повторно использует уже выбранное представление для отображения нового элемента, вам необходимо сохранить состояние selected в объекте, который есть у адаптера, и восстановить состояние в getView (также очищает невыделенное состояние представления)

Marcos Vasconcelos 17.04.2018 20:06

Надеюсь, мой ответ поможет: stackoverflow.com/questions/48664207/…

i_A_mok 18.04.2018 04:50

@MarcosVasconcelos Спасибо за ваш ответ. но я не хотел так долго поддерживать свой класс адаптера. У меня есть еще один вопрос. Как я могу удалить элемент из arraylist после отмены выбора элемента. При первом щелчке я добавляю этот элемент списка в свой arraylist и выделяю его. Я хочу удалить элемент из Arraylist при втором щелчке, когда элемент списка не подсвечен.

aditya kumar singh 18.04.2018 09:01

Единственный простой способ - оставить поле в объекте для переключения между выбранным состоянием.

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

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