0

我为被点击的项目设置了背景。

list  = (ListView)findViewById(R.id.listView1);

list.setOnItemClickListener(new OnItemClickListener() {
    @Override
    //ListView parent, View v, int position, long id 
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        arg1.setBackgroundColor(Color.RED);
    }
});

问题是,当我单击另一个项目时,最后一个项目和新项目将是红色。是否可以在 setOnItemClickListener 中为最后一项(或全部)设置红色?

非常感谢。

4

2 回答 2

0

是的,使用 xml 中的选择器标签创建一个自定义背景可绘制对象,并将其作为背景添加到您的子布局中。

有关更多信息,请参见:http: //developer.android.com/guide/topics/resources/drawable-resource.html#StateList

于 2013-02-02T09:41:00.407 回答
0

问题是他们需要从前一个视图中删除背景,因此您需要获取前一个 itemview 并从该视图和当前视图集背景中删除背景。

  1. 如果你想重置你的列表视图而不是你必须在循环中做的。

或者

  1. 您必须以某种方式存储先前选定的项目位置。比点击时间你可以做删除背景。你可以得到以前的设置项IE。

    public View previousItemView(){ 
        int wantedPosition =  childPosition;
    // This is the same as child #0
    int firstPosition = parent.getFirstVisiblePosition();
    int wantedChild = wantedPosition - firstPosition;
    // Say, first visible position is 8, you want position 10, wantedChild
    // will now be 2
    // So that means your view is child #2 in the ViewGroup:
    if (wantedChild < 0 || wantedChild >= parent.getChildCount()) {
        convertView = null;
      } else {
        // Could also check if wantedPosition is between
        // listView.getFirstVisiblePosition() and
        // listView.getLastVisiblePosition() instead.
        convertView = parent.getChildAt(wantedChild);
      }
      return convertView;
    }
    
于 2013-02-02T09:54:58.157 回答