【问题标题】:onItemClickListener implemented on other rows of custom ListViewonItemClickListener 在自定义 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;
        }
    });

提前感谢您的帮助...

【问题讨论】:

    标签: android database listview view android-arrayadapter


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-28
      • 1970-01-01
      • 2013-10-30
      • 1970-01-01
      相关资源
      最近更新 更多