Android:将列表视图项设置为“已选择";(突出显示) [英] Android: set list view item as "selected" (highlighted)
问题描述
在我的应用程序中,我想在平板电脑上做一些类似于 gmail 应用程序的事情,在左边有项目列表,在右边有一个包含该项目内容的片段,比如对于 gmail 应用程序,这个内容正在选择后下载.在我单击一个项目后,我希望它保持突出显示,直到我更改了选择.我到达了一个可行的点,但只有当我在同一个项目上单击两次时,所以首先我单击,选择工作,然后项目返回到它的默认"状态,如果我再次单击它,选择器(对于选定的状态)是可见的.
In my application I want to do something similar to gmail app on tablets, in the left to have the list of items and in the right to have a fragment with the content of that item, like for gmail app this content is being downloaded after selection. After I click on an item I want it to remain highlighted until, of course I change the selection. I reached a point where this works but only if I click twice on the same item, so first I click, selection works and then the item goes back to its 'default' state and if I click again on it, the selector (for selected state) is visible.
这是我目前所拥有的:
1)选择器(listitem_background.xml)
1) The selector (listitem_background.xml)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/solid_white" android:state_pressed="false" android:state_selected="false"/>
<item android:drawable="@drawable/listitem_pressed" android:state_pressed="true"/>
<item android:drawable="@drawable/listitem_focused" android:state_selected="true"/>
</selector>
2) 对于列表项的顶部线性布局:
2) For the top linear layout of the list item:
android:background="@drawable/listitem_background"
(我也尝试将其设置为列表选择器)
(I tried setting this as listselector, as well)
3) 这是列表视图:
<ListView
android:id="@+id/my_list_view"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:choiceMode="singleChoice"
android:dividerHeight="1dp"
android:drawSelectorOnTop="true"
android:fadeScrollbars="true"
android:fastScrollEnabled="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:scrollbarFadeDuration="100"
android:scrollbars="vertical" />
4) 在代码部分,我试着玩这个:
4) In the code part I tried to play with this:
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
view.setSelected(true);
...
}
事实上,我注意到在屏幕右侧提交片段后选择丢失了.如果我不提交片段,它就像一个魅力......我想我在选择器中需要这样的东西:
In fact I've noticed that the selection is lost after the commit of the fragment in the right side of the screen. If I don't commit the fragment it works like a charm... I think I need something like this in the selector:
<item android:drawable="@drawable/listitem_focused" android:state_activated="true" android:state_focused="false"/>
但显然不是这个...
推荐答案
好的,终于有答案了.
想法是在选择器中使用 state_activated 和
The idea is to use the state_activated in the selector and
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE)
在代码中,或
android:choiceMode="singleChoice"
当然是在xml中
选择器应该是这样的:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/solid_white" android:state_activated="false"/>
<item android:drawable="@drawable/solid_white" android:state_activated="false" android:state_pressed="false"/>
<item android:drawable="@drawable/listitem_pressed" android:state_pressed="true"/>
<item android:drawable="@drawable/listitem_focused" android:state_activated="true"/>
</selector>
列表项的布局应该是这样的:
This is how the list item layout should be:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/listitem_background"
android:orientation="vertical" >
...
<LinearLayout/>
这篇关于Android:将列表视图项设置为“已选择";(突出显示)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!