【问题标题】:Color of TextView in listview item changes automatically androidlistview项目中TextView的颜色会自动更改android
【发布时间】:2021-06-15 16:21:00
【问题描述】:

所以我尝试使用 ListView 将我的 TextView 中的文本颜色设置为单击时的绿色。 我还使用 Filterable 和 EditText 的 addTextChangedListener 来搜索我的 ArrayList 中的项目。

问题是,当我单击一个项目时,textview 变为绿色(如预期的那样),但是当我尝试搜索其他内容时,我看到 ListView 中第一个项目内的 TextView 的颜色变为绿色,而我单击的那个自动变回白色。

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

            }
        });

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

            }
        });

单击 ListView 中的项目时的示例图像:

在我没有点击任何项目的情况下搜索其他内容后:

如何防止我选择的 TextView 的颜色在我的 ListView 中自动更改?

感谢您的帮助!

【问题讨论】:

  • 您可以在模型类中存储一个布尔值,然后单击将值更改为 true 并通知适配器,下次当您搜索一些文本时,然后从适配器获取模型列表并找到如果有任何真值将其设置为假并再次通知。

标签: java android android-listview android-adapter android-filterable


【解决方案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();

            }
        });

【讨论】:

  • 还是一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-31
  • 1970-01-01
相关资源
最近更新 更多