【发布时间】: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();
}
});
如何防止我选择的 TextView 的颜色在我的 ListView 中自动更改?
感谢您的帮助!
【问题讨论】:
-
您可以在模型类中存储一个布尔值,然后单击将值更改为 true 并通知适配器,下次当您搜索一些文本时,然后从适配器获取模型列表并找到如果有任何真值将其设置为假并再次通知。
标签: java android android-listview android-adapter android-filterable