Jec*_*imi 50 android listview highlight
我有两个片段.第一个带有按钮,另一个带有ListView内部(ListFragment).
我想第一个片段(由于它的按钮)允许用户浏览第二个片段中的ListView.
所以我希望ListView由带有按钮的第一个片段控制.
我在片段之间进行通信没有问题(从第一个片段到第二个片段发送命令),但我不知道如何告诉我的ListView选择(以编程方式)特定列表项.
我应该使用什么样的ListView,如何告诉ListView选择/突出显示/聚焦其中一个项目?
当用户按下第一个片段的按钮时,我处于触摸模式.
我应该使用setFocusableInTouchMode(true)或者setChoiceMode(ListView.CHOICE_MODE_SINGLE)还是其他什么东西?
Jec*_*imi 137
这适用于所有人:
- 以编程方式选择ListView中的项目
- 使此项目保持突出显示
我正在研究Android ICS,我不知道它是否适用于所有级别的Api.
首先创建一个列表视图(如果您已经在listActivity/listFragment中,则获取它)
然后将listview的选择模式设置为单一:Mylistview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
然后以编程方式选择您的项目 :( Mylistview.setItemChecked(position, true);位置是一个整数,表示要选择的项目的排名)
现在您的项目实际上已被选中,但您可能看不到任何内容,因为没有选择的视觉反馈.现在您有两个选项:您可以使用预建的列表视图或自定义列表视图.
1)如果你想有一个预置的列表视图,给一个尝试simple_list_item_activated_1,simple_list_item_checked,simple_list_item_single_choice,等...
您可以像这样设置列表视图,例如: setListAdapter(new ArrayAdapter<String>(this, R.layout.simple_list_item_activated_1, data))
按照你选择的预建列表视图,你现在会看到,当你选择了勾选的复选框或改变了背景颜色等等...
2)如果您使用自定义列表视图,那么您将定义将在每个项目中使用的自定义布局.在此XML布局中,您将为您行中的每个零件视图定义一个选择器,该选择器需要在更改时进行更改.
假设选择此选项后,您希望您的行更改文本颜色和背景颜色.您的XML布局可以写成:
<?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="wrap_content"
android:background="@drawable/menu_item_background_selector"
android:orientation="horizontal" >
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:textColor="@drawable/menu_item_text_selector" />
Run Code Online (Sandbox Code Playgroud)
现在,在drawable文件夹中创建menu_item_background_selector.xml和menu_item_text_selector.xml.
menu_item_text_selector.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true"
android:color="#FFF">
</item>
<item android:state_pressed="true"
android:color="#FFF">
</item>
<item android:state_pressed="false"
android:color="#000">
</item>
</selector>
Run Code Online (Sandbox Code Playgroud)
选中后,文本将为白色.
然后为你的背景做类似的事情:(记住你不是被迫使用颜色,但你也可以使用drawables)
menu_item_background_selector.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true"
android:color="#0094CE">
</item>
<item android:state_pressed="true"
android:color="#0094CE">
</item>
<item android:state_pressed="false"
android:color="#ACD52B">
</item>
</selector>
Run Code Online (Sandbox Code Playgroud)
选中时背景为蓝色,未选中时背景为绿色.
我缺少的主要元素是android:state_activated.确实(太)许多状态:激活,按压,聚焦,检查,选择......
我不知道如果我给与为例android:state_activated并且android:state_pressed是最好的和最干净的一个,但它似乎为我工作.
但我不需要创建自己的类来获取Custom CheckableRelativeLayout(这是脏的和可怕的),也不需要使用CheckableTextViews.我不知道为什么他们使用这种方法,它可能取决于Api水平.
这对我有用:
1)设置List的选择行为.
mListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
Run Code Online (Sandbox Code Playgroud)
2)设置指定位置的检查状态.
mListView.setItemChecked(1,true); //Don't make the same mistake I did by calling this function before setting the listview adapter.
Run Code Online (Sandbox Code Playgroud)
3)在样式资源(res/values)中添加一个新样式,如下所示:
<style name="activated" parent="android:Theme.Holo">
<item name="android:background">@android:color/holo_green_light</item>
</style>
Run Code Online (Sandbox Code Playgroud)
随意使用您喜欢的颜色.
4)在ListView中使用先前定义的样式:
<ListView
android:id="@+id/listview"
style="@style/activated"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"/>
Run Code Online (Sandbox Code Playgroud)
或者在用作行的布局中.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/activated"
>
<!--widgets for your row here-->
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
希望能帮到任何人!
尝试 mListView.setSelection(position);
| 归档时间: |
|
| 查看次数: |
85941 次 |
| 最近记录: |