onItemClickListener 在自定义 ListView 的其他行上实现
Posted
技术标签:
【中文标题】onItemClickListener 在自定义 ListView 的其他行上实现【英文标题】:onItemClickListener implemented on other rows of custom ListView 【发布时间】:2013-08-19 20:10:02 【问题描述】:--已编辑--
我有什么:
2个不同颜色的ListView
我正在使用 CustomListViewAdapter
我想做的事:
1-在第一个ListView的item点击时,这个View的颜色会被设置为和第二个相同的颜色,TextView的文本颜色会是白色而不是黑色。
2-当单击另一个项目时,第一个项目将返回原样。
问题:
一切都很顺利,直到我注意到当我点击一个项目并滚动时,其他视图也在改变背景颜色和文本颜色..
在 CustomListAdapter 的 getView() 中:
代码:
vi = inflater.inflate(R.layout.itemshow, null);
vi.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
Log.i("myList","isClicked");
if(PreviousView!=null)
PreviousView.setBackgroundColor(Color.WHITE);
holder.nametext.setTextColor(Color.BLACK);
holder.quantitytext.setTextColor(Color.BLACK);
holder.pricetext.setTextColor(Color.BLACK);
v.setBackgroundColor(Color.parseColor("#330000"));
holder.nametext.setTextColor(Color.WHITE);
holder.quantitytext.setTextColor(Color.WHITE);
holder.pricetext.setTextColor(Color.WHITE);
PreviousView = v;
);
提前感谢您的帮助...
【问题讨论】:
【参考方案1】:您需要在listviews
的getView
方法中为视图设置默认颜色。发生这种情况的原因是因为视图在listview
中被回收。如果您想更好地控制您的视图,您最好创建自己的适配器并覆盖 getView()
方法:
@Override
public View getView(int position, View convertView, ViewGroup parent)
vi = inflater.inflate(R.layout.itemshow, null);
vi.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
Log.i("myList","isClicked");
if(PreviousView!=null)
PreviousView.setBackgroundColor(Color.WHITE);
holder.nametext.setTextColor(Color.BLACK);
holder.quantitytext.setTextColor(Color.BLACK);
holder.pricetext.setTextColor(Color.BLACK);
vi.setBackgroundColor(Color.parseColor("#330000"));
holder.nametext.setTextColor(Color.WHITE);
holder.quantitytext.setTextColor(Color.WHITE);
holder.pricetext.setTextColor(Color.WHITE);
PreviousView = vi;
);
vi.setBackgroundColor(Color.parseColor("#000000")); // setup default color here
// for your TextView's as well, if you change them on click
【讨论】:
我没有使用 CustomListViewAdapter 这就是问题。我使用的是 SimpleCursorAdapter 我在使用自定义适配器时遇到了很多麻烦,这就是我改用这种方法的原因.. 好的,所以我又改回了自定义适配器。但我也发现自己遇到了同样的问题。如果您能提供帮助,我会重新发布我的新代码,非常感谢 您需要在getView()
方法中明确设置背景,即 v.setBackgroundColor(Color.parseColor("#000000"));
好的,所以我设置了视图的背景颜色和 TextViews 的文本颜色。现在,当单击并上下滚动时,视图会恢复到原来的颜色和文本颜色:/【参考方案2】:
我终于解决了我的问题。如果有人感兴趣,我会发布我的代码:) 我现在不会发布它,因为没有很多视图..
我还推荐阅读这篇文章有困难的人:
http://android.amberfog.com/?p=296
【讨论】:
以上是关于onItemClickListener 在自定义 ListView 的其他行上实现的主要内容,如果未能解决你的问题,请参考以下文章
Android OnItemClickListener 和 OnClickListener [重复]
传递嵌套在片段中的 AdapterView.OnItemClickListener() 中的活动上下文 - 方法未定义
未调用 DrawerLayout 中的自定义 BaseAdapter ListView onItemClickListener