ListView项setTextColor修改了其他元素

时间:2011-04-24 09:13:49

标签: android listview text colors onclick

我有一个由SimpleCursorAdapter和自定义ViewBinder支持的ListView。我想让这个列表视图中的项目在点击时改变它们的颜色。如果我在OnClickListener中执行此操作 - 它会在paritally工作,更改单击项目的颜色,以及列表中的项目的颜色,每个7(我猜,时间段取决于列表视图的可视区域)。

任何人都可以建议如何处理这个问题?或者,也许指向一个更优雅的方式使listView中的项目可选?

谢谢。

UPD :(抱歉格式错误 - 这是我第一次发帖):

以下是我尝试将ListView中的项目“选中”的方式:

    private void setupListView(final ListView lv) {

        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> adapterView, View view, int position, final long id) {
                RelativeLayout layout = (RelativeLayout) view;
                int color;
                if (conditionMet) {
                      color = R.color.gray;
                 } else {
                      color = R.color.red;
                 }

                 for(int i = 0; i < layout.getChildCount(); i++) {
((TextView)layout.getChildAt(i)).setTextColor(getResources().getColor(color)); 
    }

                 return;
            }}

这是我启动适配器的方式:

        final SimpleCursorAdapter adapter =
                new SimpleCursorAdapter(
                        this,
                        itemId,
                        cursor,
                        from,
                        to
                );
        adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {

            public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
                final TextView textView = (TextView) view;
// do necessary conversions
                return true;
            }
        });
listView.setAdapter(adapter);

2 个答案:

答案 0 :(得分:0)

您可以使用属性android:listSelector设置主题或列表中当前所选项目的任何可绘制或颜色。

答案 1 :(得分:0)

由于没有其他答案,而且,我认为,我在下面的建议中遇到了一些麻烦,我发布了我是如何做到的:

  1. 我存储了在特殊地图中点击的项目的ID

  2. 在listview onclick中
  3. 我检查刚刚点击的项目的ID是否在地图中:如果是,我删除它并使项目及其子项颜色为A,否则我将id添加到地图中将颜色设置为B

    public void onItemClick(AdapterView<?> adapterView, View view, int position, final long id) {
                Context ctx = MainActivity.this;
                    RelativeLayout layout = (RelativeLayout) view;
                    try {
    
                            int color;
                            if (items.containsKey(id)) {
                                items.remove(id);
                                color = R.color.gray;
                                tempIds.remove(id);
                            } else {
                                items.put(id, sum);
                                color = R.color.red;
                                tempIds.add(id);
                            }
    
    
                        for (int i = 0; i < layout.getChildCount(); i++) {
                            final TextView textView = (TextView) layout.getChildAt(i);
                            textView.setTextColor(getResources().getColor(color));
                        }
                    } catch (ParseException e) {
                        Log.e(MainActivity.class.toString(), "Exception parsing", e);
                    }
                    return;
                }
    

    }