Android ListView 失去焦点

Posted

技术标签:

【中文标题】Android ListView 失去焦点【英文标题】:Android ListView is loosing focus 【发布时间】:2011-01-04 16:10:49 【问题描述】:

我有一个包含 ListView 的布局。此 ListView 中的每个视图(行)都是一个 LinearLayout,其中包含 3 个视图 - CheckBox、ImageView 和一个 TextView(水平)

我的问题是这样的 - 如果我使用轨迹球突出显示 ListView 中的一行,它可以工作(行的背景颜色是橙色)。通过在突出显示一行时单击轨迹球,我将当前显示的布局切换到另一个布局(setContentView())。现在,如果使用 ListView 重新显示原始布局(我存储它的实例以重新显示它,它不会被重新创建!),突出显示的行不再突出显示。按照google的说法,这没问题,我一用轨迹球,高光就会回来。

真正的问题是,即使我现在使用轨迹球在列表中上下移动,ListView 中的其他行也不会突出显示。相反,在由于滚动而应突出显示的每一行中,TextView 被选中,我知道,因为我将 TextView 设置为滴答声 (TruncateAt.MARQUEE)。

如果我CLICK轨迹球,则高亮显示会返回到其 TextView 目前正在标记的行。

我尝试通过将 TextView 设置为不可聚焦、不可点击和禁用来解决此问题。我什至尝试在 ListView 上设置 setItemsCanFocus(false) - 仍然没有成功。

请帮帮我... 谢谢!

【问题讨论】:

我不确定如何解决您的特定问题,但让我担心的是您正在使用setContentView() 更改布局而不是开始新的活动。为什么? 我认为很多开发人员都在问这个问题......是否为每个应用程序的屏幕使用新的活动。我不认为有必要为每个屏幕创建一个新的 Activity... 每个屏幕都是一个 ViewGroup 我只是使用 setContentView() 在屏幕之间切换...这是错的吗?谢谢。 通常最好分成多个活动。一个原因是保持一致的后退按钮行为。就我个人而言,我觉得代码最终变得更干净了,而且我不喜欢在 Activity 中管理过多的状态。 【参考方案1】:

我有一个布局,其中包含 列表显示。此中的每个视图(行) ListView 是一个 LinearLayout 包含 3 个视图 - CheckBox、ImageView 和一个 TextView(水平)

改为使用CheckedTextViewImageView,并将android:choiceModeListView 一起使用。

现在,如果重新显示原来的 ListView 的布局(我存储它的 例如重新显示它,它是 没有被重新创建!), 突出显示的行未突出显示 没有了。

不要那样做。使用ViewFlipper,或更改ListView 的可见性以及您正在展示的任何其他内容或其他内容,如果您觉得需要将这一切保存在一个Activity 中。或者,正如 Lew 先生所建议的,当您单击 ListView 时,再启动另一个 Activity

我怀疑这些组合将有助于解决您的问题。

【讨论】:

关于CheckedTextView,我不知道这个View,但我不认为这是我的问题。至于选择模式 - 我没有提到它,但我确实将选择模式设置为 MULTIPLE,因为我想要选择几个项目。关于 ViewFlipper - 这是我不熟悉的另一个类,但在阅读了它之后,这对我来说不是一个好的解决方案(我认为......) - 没有选择只做一次翻转,只能开始翻转而不是停止它......我什至试图找到一个视图被翻转时的事件,但没有这样的事情。谢谢。 “但我确实将选择模式设置为 MULTIPLE,因为我想要选择多个项目”——这意味着您必须使用 CheckedTextView 才能使其正常工作,期间。 “没有选择只做一次翻转”——请更仔细地阅读文档。或者,看看github.com/commonsguy/cw-android/tree/master/Fancy/Flipper1

以上是关于Android ListView 失去焦点的主要内容,如果未能解决你的问题,请参考以下文章

Android开发中EditText的点击Enter键焦点改变处理(获取焦点和失去焦点交互变化)

Android TV - 在细节片段中失去焦点

片段变化后失去焦点(ANDROID TV)

编辑文本在 xamarin Android 中自动失去焦点

Android 如何使edittext默认失去焦点

Android中EditText获得焦点后马上又失去了,可能是啥造成的呢