gpt4 book ai didi

android - 在Android中以编程方式选择ListView中的项目

转载 作者:太空宇宙 更新时间:2023-11-04 11:44:55 25 4
gpt4 key购买 nike

我有两个 fragment 。第一个内部有按钮,另一个内部有 ListView (ListFragment)。

我希望第一个 fragment (感谢它的按钮)允许用户浏览第二个 fragment 中的 ListView。

所以我希望 ListView 由第一个带有按钮的 fragment 控制。

我在 fragment 之间进行通信没有问题(从第一个 fragment 发送订单到第二个 fragment ),但我不知道如何告诉我的ListView(以编程方式)选择特定的列表项。

我应该使用哪种类型的 ListView?如何告诉 ListView 选择/突出显示/聚焦其中一项?

当用户按下第一个 fragment 的按钮时,我处于触摸模式。

我应该使用 setFocusableInTouchMode(true)setChoiceMode(ListView.CHOICE_MODE_SINGLE) 还是其他内容?

最佳答案

这适用于所有尝试:

-以编程方式选择 ListView 中的项目

-使该项目保持突出显示

我正在研究Android ICS,我不知道它是否适用于所有级别的Api。

首先创建一个 ListView (如果您已经在 listActivity/listFragment 中,则获取它)

然后将 ListView 的选择模式设置为单一:Mylistview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

然后以编程方式选择您的项目:Mylistview.setItemChecked(position, true); (位置是一个整数,表示要选择的项目的排名)

现在您的项目实际上已被选择,但您可能什么也看不到,因为没有选择的视觉反馈。现在您有两个选择:您可以使用预构建的 ListView 或自定义 ListView 。

1) 如果您想要预建的 ListView ,请尝试 simple_list_item_activated_1 , simple_list_item_checked , simple_list_item_single_choice等等...

您可以像这样设置 ListView ,例如:setListAdapter(new ArrayAdapter<String>(this, R.layout.simple_list_item_activated_1, data))

在您选择的预构建 ListView 之后,您现在会看到,选择后您会勾选一个复选框或更改背景颜色等...

2) 如果您使用自定义 ListView ,那么您将定义将在每个项目中使用的自定义布局。在此 XML 布局中,您将为行中的每个零件 View 指定一个选择器,选择该选择器时需要更改。

假设选择后您希望行更改文本颜色和背景颜色。您的 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" />

现在,在可绘制文件夹中创建 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>

选中后文本将为白色。

然后对您的背景执行类似的操作:(请记住,您不是被迫使用颜色,但您也可以使用可绘制对象)

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>

此处,选中时背景为蓝色,未选中时背景为绿色。

我缺少的主要元素是 android:state_activated 。确实有(太多)很多状态:激活、按下、聚焦、选中、选择...

我不确定我给出的例子是否是android:state_activatedandroid:state_pressed是最好、最干净的一个,但它似乎对我有用。

但是我不需要创建自己的类来获得自定义 CheckableRelativeLayout(这又脏又可怕),也不需要使用 CheckableTextViews。我不知道为什么其他人使用这样的方法,这可能取决于Api级别。

关于android - 在Android中以编程方式选择ListView中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42444628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com