ListView:如何从列表中访问视图以更改背景颜色?
Posted
技术标签:
【中文标题】ListView:如何从列表中访问视图以更改背景颜色?【英文标题】:ListView: how to access a view from the list to change the background color? 【发布时间】:2014-04-15 19:00:37 【问题描述】:我有一个使用自定义字符串适配器的 ListView,因此我可以更改字体和文本类型。但是,我希望列表中的选定项目具有与其他项目不同的背景颜色。
我使用 onItemClick 侦听器,通过它我可以更改所选项目的颜色。但我不知道如何将先前选择的选项的颜色改回来。代码如下:
schemelist = new ListView(context);
AuxClasses.CustomAdapter adapter = new AuxClasses.CustomAdapter(context,android.R.layout.simple_list_item_1,Aux.FontMastermind,Aux.WhiteColor,14);
adapter.addAll(Aux.SchemeList);
schemelist.setAdapter(adapter);
schemelist.setOnItemClickListener(new AdapterView.OnItemClickListener()
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l)
view.setBackgroundColor(selection_color);
//Change the background color of the previously selected item.
);
我想我需要访问先前选择的项目的视图,但是我不知道如何访问特定位置的视图。
有什么想法吗?
【问题讨论】:
【参考方案1】:两种方式:
更容易&不推荐。老实说,我什至不认为这会奏效。好吧,你可以试一试:
保留一个班级成员previouslySelectedView
。
View previouslySelectedView;
....
schemelist.setOnItemClickListener(new AdapterView.OnItemClickListener()
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l)
if (previouslySelectedView != null)
previouslySelectedView.setBackgroundColor(ORIGINAL_COLOR);
view.setBackgroundColor(selection_color);
previouslySelectedView = view;
);
推荐方式:
在你的适配器中声明一个变量mSelectedPosition
。
int mSelectedPosition = -1;
为mSelectedPosition
写一个setter:
public void setSelectedPosition(int pos)
mSelectedPosition = pos;
notifyDataSetChanged();
在您的 getView(....) 方法中,检查当前位置是否为选中位置:
if (curPos == mSelectedPosition)
convertView.setBackgroundColor(selection_color);
else
convertView.setBackgroundColor(ORIGINAL_COLOR);
现在,您需要在 onItemClick(....)
内部做的所有事情:
schemelist.setOnItemClickListener(new AdapterView.OnItemClickListener()
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l)
adapter.setSelectedPosition(i);
);
就是这样。您需要将adapter
声明为final
。
【讨论】:
谢谢!!!我使用第二种方法就像一个魅力。我试过了。但我从未见过 notifyDataSetChanged();命令。以上是关于ListView:如何从列表中访问视图以更改背景颜色?的主要内容,如果未能解决你的问题,请参考以下文章
Flutter - 如何访问 ListView.builder 中的一个元素?