Цвет TextView в элементе списка автоматически меняется

Итак, я пытаюсь использовать ListView, чтобы установить цвет текста в моем TextView на зеленый при нажатии. Я также использую Filterable с addTextChangedListener EditText для поиска элементов в моем ArrayList.

Проблема в том, что когда я нажимаю на элемент, текстовое представление меняется на зеленый (как и предполагалось), но когда я пытаюсь найти что-то еще, я вижу, что цвет TextView внутри первого элемента в моем ListView становится зеленым, а тот, который я щелкнул, снова меняется на белый автоматически.

EditText onTextChnagedListener:

 editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                if(TextUtils.isEmpty(s.toString()))
                {
                    listView.clearTextFilter();
                }
                else
                {
                    listView.setFilterText(s.toString());
                        adapter.getFilter().filter(s.toString());
                    }
                }
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

Слушатель onItemClickListener для ListView:

View selectedView = null;
int selectedPositon = -1;
 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                view.setSelected(true);
                if(selectedPosition != -1)
                {
                    if(selectedView != null)
                    {
                        TextView textView = selectedView.findViewById(R.id.search_frag_listview_item_songname);
                        textView.setTextColor(Color.parseColor("#FFFFFF"));
                        selectedPosition = (int) id;
                        TextView selectedView = view.findViewById(R.id.search_frag_listview_item_songname);
                        selectedView.setTextColor(Color.parseColor("#00FF00"));
                        selectedView.setSelected(false);
                    }
                    selectedPosition = (int) id;
                    selectedView = view;
                }
                else
                {
                    view.setSelected(true);
                    TextView textView = view.findViewById(R.id.search_frag_listview_item_songname);
                    textView.setTextColor(Color.parseColor("#00FF00"));
                    selectedView = view;
                    selectedPosition = (int) id;
                }

                adapter.notifyDataSetChanged();

            }
        });

Пример изображения, когда я щелкаю элемент в ListView: img

После того, как я ищу что-то еще, не нажимая ни на один элемент: img2

Как предотвратить автоматическое изменение цвета TextView, который я выбрал, в моем ListView?

Спасибо за помощь!


person Rag    schedule 18.03.2021    source источник
comment
Вы можете сохранить логическое значение в своем классе модели и при щелчке изменить значение false на true и уведомить адаптер, в следующий раз, когда вы будете искать какой-либо текст, затем получите список моделей из адаптера и найдите, если какое-либо истинное значение установило его в false и снова уведомить.   -  person Devendra Singh    schedule 22.03.2021


Ответы (1)


Попробуй это.

View selectedView = null;
int selectedPositon = -1;
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                view.setSelected(true);
                if(selectedPosition != -1 && selectedView != null)
                    {
                        TextView textView = selectedView.findViewById(R.id.search_frag_listview_item_songname);
                        textView.setTextColor(Color.parseColor("#FFFFFF"));
                        selectedPosition = (int) id;
                        TextView selectedView = view.findViewById(R.id.search_frag_listview_item_songname);
                        selectedView.setTextColor(Color.parseColor("#00FF00"));
                        selectedView.setSelected(false);
                    }
                    selectedPosition = (int) id;
                    selectedView = view;
                }
                adapter.notifyDataSetChanged();

            }
        });
person Eyosiyas    schedule 18.03.2021
comment
все так же. - person Rag; 18.03.2021