Android:列表视图上的多个操作 - 焦点问题
Posted
技术标签:
【中文标题】Android:列表视图上的多个操作 - 焦点问题【英文标题】:Android : Multiple Actions on a List View - Focus Issue 【发布时间】:2010-10-04 18:09:14 【问题描述】:我想实现一个 ListView,我可以用我的光标完成它。现在,根据您单击的哪一行,它会根据该行上按下的信息将您带到一个新活动(就像它应该和预期的那样)。我想要一个按钮来删除该行,因此用户可以按下该行的任何部分来启动新活动,但如果他们按下该行上的按钮,它会删除该行(或启动删除活动/函数)。
如果您可以查看@DroidRecord,它们的布局与我希望实现的相似。
谢谢!
克里斯。
【问题讨论】:
【参考方案1】:正如 Mariano Kamp 所说,将按钮添加到一行会使其“不可触摸”,但根据我的经验,如果您在按钮上设置这些属性,这个问题就会消失:
android:focusable="false"
android:focusableInTouchMode="false"
另见How to fire onListItemClick in Listactivity with buttons in list?
【讨论】:
【参考方案2】:另一种可能的解决方法 - 您可以使用 ImageView 代替按钮,并设置 ImageView 的 onClickListener(例如,当您膨胀单元格视图时)。
ImageView 不可聚焦,因此它不会阻止 OnListItemClick() 被调度,并且当您单击图像时,只会触发图像的侦听器。
【讨论】:
【参考方案3】:你的问题是什么?如何向列表行添加按钮?
非常简单,正如您所期望的那样,它将被添加到行的布局中。
不幸的是,这也会使整行“不可触碰”。我问过的谷歌开发人员说这是设计使然(据我所知),你应该使用 TouchDelegate 来解决这个问题。因为没有样本,甚至在 android 源代码中也没有,只有非常薄的 documentation 对我不起作用
无论如何,似乎没有多少应用程序使用列表行中的按钮。我只知道我的(newsrob,参见文章列表)和闹钟。也许你可以使用上下文菜单?
否则,丑陋的解决方案是在 getView 方法中的行视图上添加调用 setOnClickListener()。
干杯
【讨论】:
您能解释一下如何将其设置为行视图吗?我的行被绘制为我调用的填充数据函数的一部分,该函数使用 SimpleCursorAdapter(this,R.layout.row_detail,c, from, to);我应该重写什么方法来设置 onclick 侦听器。当我在我的 create 方法上尝试它时,我的应用程序崩溃了。 抱歉,我对 SimpleCursorAdapter 不熟悉……我直接使用 BaseAdapter,但 SimpleCursorAdapter 的工作原理应该差不多。查看文档,我怀疑 bindView 是适合您的方法。您会在此处获得视图(rowview)。 继续 .... 要查看您的应用程序崩溃的原因(并将其包含在您的问题描述中),您可以使用“adb -e logcat”。这将显示正在运行的模拟器的日志文件。 我对原木猫很熟悉,但我一定会试一试。谢谢。【参考方案4】:这不是您问题的答案,但长按/选项卡通常是弹出上下文菜单并进行额外操作(如删除)的地方。你可以在这里阅读如何做:How do you implement context menu in a ListActivity on Android?
【讨论】:
【参考方案5】:我要感谢 BoD 的 hint 删除按钮的 focusable
状态,它拯救了我的一天。
但是对于信息,由于 focusable
- state_focused
,因此它的设计将不再向用户显示。
尽管这些按钮仍将获得状态 pressed
,但在单击父视图上的其他任何位置(任何位置但另一个按钮)时也是如此!
请记住,对于您自己的情况,这可能不是一个好的解决方案,但它确实有效。
【讨论】:
【参考方案6】:我试过这个能够点击按钮,但它对我不起作用 安卓:可聚焦=“假” android:focusableInTouchMode="false"
所以我所做的就是将活动布局更改为滚动视图,然后在其中添加一个 linerLayout。 之后,您可以在布局中添加按钮,并且每个按钮都可以点击。
【讨论】:
以上是关于Android:列表视图上的多个操作 - 焦点问题的主要内容,如果未能解决你的问题,请参考以下文章
Android 2.3 上的 webkit 渲染问题 - 一些列表视图元素的边界模糊
将第 n 项焦点放在 Jquery Mobile 列表视图上