Color of TextView in listview item changes automatically android

56 Views Asked by At

So I am trying to use ListView to set the color of the text in my TextView to green when its clicked. I also use Filterable with EditText's addTextChangedListener to search for items in my ArrayList.

The problem is when I click on a item the textview changes to green (as intended) but when i try to search something else I see the color of the TextView inside the first item in my ListView goes green and the one i clicked changes back to white automatically.

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) {

            }
        });

The onItemClickListener of 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();

            }
        });

Example image of when I click item in ListView: img

After I search something else without clicking on any item: img2

How do I prevent the color of the TextView I selected from automatically changing in my ListView?

Thanks for the help!

1

There are 1 best solutions below

1
Eyosiyas On

Try this one.

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();

            }
        });