我读了很多关于ListSelector和选择器的内容。但我无法弄清楚如何让ListView的项目具有不同的颜色在被按下之后。
在双片段布局中,用户点击左侧列表视图,数据加载并显示在右侧片段中。为了让用户知道选择了哪个项目我想要突出显示,直到按下左侧ListView中的下一个项目。
我需要一个自定义国家吗? GMail应用程序如何做到这一点?
THX
答案 0 :(得分:2)
是的,那里你需要额外的状态。我不确定,GMail应用程序是如何做到的,但默认的android设置在其选择器中使用android:state_activated="true"
状态作为平板电脑上的列表。不要忘记设置列表android:choiceMode="singleChoice"
。
答案 1 :(得分:2)
你试过这个选择器吗?
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_window_focused="false" android:state_selected="true"
android:drawable="@android:color/transparent" />
<item android:state_selected="true"
android:drawable="@android:color/transparent" />
<item android:state_pressed="true" android:state_selected="false"
android:drawable="@android:color/transparent" />
<item android:state_selected="false"
android:drawable="@color/message_item_read" />
选择器必须应用于项目背景,而不是应用于listSelector。
答案 2 :(得分:2)
我的Android解决方案&gt; 1.6是:
在活动中:
public static int POS = -1;
...
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
...
POS = arg2;
...
}
适配器中的:
public View getView(int position, View convertView, ViewGroup parent) {
...
int pos = MyActivity.POS;
if (pos == position){
convertView.setBackgroundResource(R.drawable.lv_yellow);
}else{
convertView.setBackgroundResource(R.drawable.lv_empty);
}
...
}
答案 3 :(得分:1)
我自己也遇到了这个问题......经过长时间的努力,我找到了解决方案并且它对我有用。首先在drawable文件夹下创建list_view_selector.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Selector style for listrow -->
<item
android:state_selected="false"
android:drawable="@drawable/gradient_bg_listview" />
<item android:state_selected="true"
android:drawable="@drawable/gradient_bg_hover_listview" />
<item android:state_activated="true"
android:drawable="@drawable/gradient_bg_hover_listview" />
</selector>
然后用于获取列表数据的布局必须定义list_view_selector。就我而言,我的定义如下:
//This is the adapter where I defined my customlistview
SimpleAdapter adapter1 = new SimpleAdapter(
this,
list1,
R.layout.customlistview,
new String[] {"practice_technique","blank"},
new int[] {R.id.text1,R.id.text2}
);
//This is my customlistview where I defined list_view_selector
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@drawable/list_view_selector" >
<TextView android:id="@+id/text1"
style="@style/ListViewItemTextStyle"
android:layout_width="fill_parent"
android:paddingTop="5dp"
android:paddingLeft="10dp"
android:layout_height="fill_parent"
/>
<TextView android:id="@+id/text2"
android:textSize="12sp"
android:textStyle="bold"
android:textColor="#616162"
android:paddingLeft="10dp"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</RelativeLayout>
然后最后onListItemclick你必须写这样的东西:
protected void onListItemClick(ListView l, View v, int position, long id)
{
super.onListItemClick(l, v, position, id);
HashMap<String, String> val = list.get(position);
selectedTech = val.get("practice_technique");
//below is the key line
v.setSelected(true);
startSelectedPage();
}
答案 4 :(得分:0)
编写自己的ListAdapter来执行此操作。具体来说,我会扩展ArrayAdapter,并在此方法中添加一些代码:
View getView(int position, View convertView, ViewGroup parent)
本质上,此代码将检测是否已单击该值,并更改视图的背景颜色。现在,你怎么知道以前点击了一个视图?我建议您进行ArrayAdapter
扩展OnClickListener
,并将ListView的setOnItemClickListener
设置为自定义ArrayAdapter
。您可以通过以下方式确定单击了哪个项目:
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
//Note that position is the item which was clicked.
}