listview项目中TextView的颜色会自动更改android

Posted

技术标签:

【中文标题】listview项目中TextView的颜色会自动更改android【英文标题】:Color of TextView in listview item changes automatically 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 并通知适配器,下次当您搜索一些文本时,然后从适配器获取模型列表并找到如果有任何真值将其设置为假并再次通知。 【参考方案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();

            
        );

【讨论】:

还是一样。

以上是关于listview项目中TextView的颜色会自动更改android的主要内容,如果未能解决你的问题,请参考以下文章

动态更改 ListView 中三个不同组的 TextView 颜色

Android - 突出显示TextView中的单词?

Android ListView 内置TextView动态改变其背景颜色

如何在 ListView 中为 TextView 的背景颜色添加渐变效果?

Android ListView重写BaseAdapter如何改变指定item中的TextView的颜色?

Android 点击ListView(或GridView)的一个item,使其里面textview变色,点击另一个这个恢复原来颜色