2011-04-24 99 views
0

我有一个由SimpleCursorAdapter和自定义ViewBinder支持的ListView。我想让这个listview中的项目在点击时改变它们的颜色。如果我在OnClickListener中这样做 - 它可以单独工作,改变点击项目的颜色和列表中项目的颜色,每个第7(我想这个时间段取决于列表视图的可视区域)。ListView项setTextColor修改其他元素

任何人都可以建议如何处理这个?或者,也许指向一个更优雅的方式,使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; 
      }} 

这是我的init适配器:

 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); 
+1

你能告诉我们你的代码吗? – MByD 2011-04-24 09:18:17

+0

添加了一些代码,添加任何其他部分?实际上,正如我所说,这部分工作,因为它“突出显示”项目本身,但随后它的视图被重用,我想 – khusrav 2011-04-24 09:34:28

回答

0

由于没有其他的答案,我想,我有一些麻烦与下面的建议,我张贴我是如何做的:

  1. 我店的商品的ID在一个特殊的地图点击

  2. in listview onclick我检查刚刚点击过的物品的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; 
          } 
    

    }

0

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

+0

我想让这个列表多选 - 这个工作会吗? – khusrav 2011-04-24 09:33:56