【问题标题】:Highlight the first element in a listview when it's shown显示时突出显示列表视图中的第一个元素
【发布时间】:2014-01-02 12:22:06
【问题描述】:

我有一个列表视图。 在您可以触摸的列表视图的每个元素上,它会触发一些东西(即吐司)。 每次您触摸任何元素时,它都必须保持突出显示状态。

我希望列表视图中的第一个元素在第一次显示列表视图时默认突出显示,这是您启动应用程序的时候。

现在除了第一个元素中的突出显示之外,我已经完成了所有工作。我的意思是,当您启动应用程序时,该元素甚至被触发但未突出显示。

有什么想法吗?

我已经尝试了很多我在 stackoverflow 上读过的东西,但没有奏效,我认为应该是很常见的东西。

我已经尝试过 setSelection、setSelected、获取视图.....

我虽然它像微调器一样工作,但它不是。

非常感谢大家!!

你可以在这里查看课程代码 --> http://goo.gl/ndY0Ni

如果有人想尝试,我已经做了一个更简单的例子 --> https://dl.dropboxusercontent.com/u/83259317/main.rar

解决方案:感谢@Jiahao 提供解决方案。

我做了一个小项目让你看看 --> http://goo.gl/35s5Dc

【问题讨论】:

标签: android listview element highlight


【解决方案1】:

SetItemChecked 适用于列表。问题是当您的行视图不是 Checkable 的实例时,它不会显示。

相反,将标记一个称为“已激活”的声明。

最简单的解决方案是自定义 rowView 以显示状态 Activated:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_selected="true"
        android:drawable="@drawable/listview_selector_pressed"/>
    <item
        android:state_pressed="true"
        android:drawable="@drawable/listview_selector_pressed"/>
    <item
        android:state_activated="true"
        android:drawable="@drawable/listview_selector_pressed"
        />
    <item
        android:drawable="@android:color/white" />
</selector>

【讨论】:

  • 也许这会增加一些线索,但它不起作用。我已经在我的 xml 中添加了按下、选择、活动、激活......很多状态,在我的活动中,我尝试使用 setSelected(true)、setActivated(true)、setItemchecked.....什么都没有工作。
  • 是的!就是这个!!对你们所有人来说,在使用 selectionItem 时请确保您的 minSDK 级别,是的,xml 上需要第三个状态。我已经更新了一个小项目给你们看看 --> goo.gl/35s5Dc
【解决方案2】:

要将 ListView 项设置为突出显示,请使用以下代码:

getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); // Highlight one at a time.
getListView().setItemChecked(position, true);

其中位置是您要突出显示的 ListItem 的编号,因此要突出显示您所做的第一项:

  getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
  getListView().setItemChecked(0, true);

这是假设您正在使用 ListActivity。 (如果不只是调用实际 ListView 对象上的方法)。

【讨论】:

  • 感谢您的回答。我之前已经尝试过,但没有工作。我在上面的主消息中添加了一个代码 url。
  • 我不明白你为什么要从活动中膨胀布局而不是在 onCreateView() 中?您尝试修改的 ListView 是否在 R.layout.products_fragment 布局中?
  • 我一直看到他们使用 onCreteView (goo.gl/lrQuQJ) 返回片段布局的视图。是的,我要突出显示的 listView 元素位于该布局中。 (mProductsListView)
  • 你可以尝试在 onCreateView() 中增加布局吗?把它放在 onCreateView 中: View v = inflater.inflate(R.layout.products_fragment, container, false); mProductListView = v.findViewById(R.id.products_listview);返回 v;
  • 我做到了(我必须将 ListView 转换到 sedond 行),从我的角度来看,它的工作方式与以前相同。
猜你喜欢
  • 2016-07-31
  • 2015-12-02
  • 2013-09-07
  • 2014-01-14
  • 1970-01-01
  • 2012-11-21
  • 2022-08-19
  • 2018-12-07
  • 1970-01-01
相关资源
最近更新 更多