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】:

您需要在listviewsgetView 方法中为视图设置默认颜色。发生这种情况的原因是因为视图在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

Listview 中未触发 Onitemclick 侦听器

两个片段之间的 onItemClickListener

OnItemClickListener() 用于列表视图的每个项目中的微调器