简体   繁体   English

列表视图项中 TextView 的颜色自动更改 android

[英]Color of TextView in listview item changes automatically android

So I am trying to use ListView to set the color of the text in my TextView to green when its clicked.因此,我尝试使用 ListView 在单击时将 TextView 中的文本颜色设置为绿色。 I also use Filterable with EditText's addTextChangedListener to search for items in my ArrayList.我还使用 Filterable 和 EditText 的addTextChangedListener来搜索我的 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.问题是当我单击一个项目时,textview 变为绿色(如预期的那样),但是当我尝试搜索其他内容时,我看到我的 ListView 中第一个项目内的 TextView 的颜色变为绿色,我单击的那个变回自动变白。

EditText onTextChnagedListener: EditText onTextChangedListener:

 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: ListView的onItemClickListener:

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:当我单击 ListView 中的项目时的示例图像: 图像

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?如何防止我选择的 TextView 的颜色在我的 ListView 中自动更改?

Thanks for the help!谢谢您的帮助!

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

            }
        });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM