3

我一直在网上,包括stackoverflow,似乎无法获得一个清晰完整的方法

我想创建一个 ListView

1)有交替的颜色(我可以用下面的代码做到这一点)2)保留android的默认橙色选择行为

为了完成#1,我有一个扩展 ArrayAdapter 的自定义适配器,然后像这样覆盖 getView

public View getView(int position,  View convertView,   ViewGroup parent)
{
  ....

  // tableLayoutId is id pointing to each view/row in my list
  View tableLayoutView = view.findViewById(R.id.tableLayoutId); 
  if(tableLayoutView != null)
  {
      int colorPos = position % colors.length;
      tableLayoutView.setBackgroundColor(colors[colorPos]);
  }
}

我的颜色成员变量是

private int[] colors = new int[] { 0x30ffffff, 0x30ff2020, 0x30808080 };

跟随文章“Android – 在 ListView 中使用 SimpleAdapter 应用备用行颜色”在这里找到

现在这是我卡住的地方,我在stackoverflow上看到一些提到这样做,因为它看起来很常见,他们建议将此属性添加到

android:listSelector="@color/list_item"

list_item.xml 类似于

<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_selected="true"
    android:drawable="@drawable/transparent" />
   .....
 </selector>

然后我必须向 getView() 添加代码,以确定我所处的状态并采取相应的行动。

有没有一个例子可以让这个工作?谢谢大家,如果我能让它工作,我很乐意发布我的供所有人使用。:-(

4

1 回答 1

8

一种解决方法是使用 2 个选择器。从您的适配器中,您设置了 2 个选择器,而不是设置 2 种颜色。

if (position % 2 == 0) {
  view.setBackgroundResource(R.drawable.selector_1);
} else {
  view.setBackgroundResource(R.drawable.selector_2);
}

selector_1 在 selector_1.xml 中定义如下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="false" android:state_pressed="false"  android:drawable="@color/white" />
<item android:state_pressed="true" android:drawable="@color/orange" />
<item android:state_selected="true" android:state_pressed="false"  android:drawable="@color/orange" />
</selector>

selector_2 在 selector_2.xml 中定义如下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="false" android:state_pressed="false"  android:drawable="@color/violet" />
<item android:state_pressed="true" android:drawable="@color/orange" />
<item android:state_selected="true" android:state_pressed="false"  android:drawable="@color/orange" />
</selector>

这样,您就有了一个双色列表视图和第三种颜色/形状/任何您想要的选定项目。

于 2011-12-08T12:38:23.570 回答