【发布时间】:2010-12-15 02:45:54
【问题描述】:
我有一个ListView,其中列表中的每个元素都包含一个 TextView 和两个不同的按钮。像这样的:
ListView
--------------------
[Text]
[Button 1][Button 2]
--------------------
[Text]
[Button 1][Button 2]
--------------------
... (and so on) ...
使用此代码,我可以为整个项目创建一个OnItemClickListener:
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> list, View view, int position, long id) {
Log.i(TAG, "onListItemClick: " + position);
}
}
});
但是,我不希望整个项目都可以点击,而只是每个列表元素的两个按钮。
所以我的问题是,如何使用以下参数为这两个按钮实现 onClickListener:
-
int button(点击了元素的哪个按钮) -
int position(这是列表中发生按钮单击的元素)
更新:我找到了一个解决方案,如下面的回答中所述。现在我可以通过触摸屏单击/点击按钮。但是,我无法使用轨迹球手动选择它。它总是选择整个列表项并从那里直接转到下一个列表项而忽略按钮,即使我在getView() 中为按钮设置了.setFocusable(true) 和setClickable(true)。
我还将这段代码添加到我的自定义列表适配器中:
@Override
public boolean areAllItemsEnabled() {
return false;
}
@Override
public boolean isEnabled(int position) {
return false;
}
这会导致列表项不再可选择。但它没有帮助使嵌套按钮可选择。
谁有想法?
【问题讨论】:
-
这些还需要吗?
-
如果您查看 BaseAdapter 代码,您会发现 areAllItemsEnabled() 和 isEnabled() 只是硬编码为 true,使它们成为没有任何逻辑的简单占位符。
-
如果我想使用 SimpleCursorAdapter 怎么办?我必须让自定义适配器扩展 simplecursoradapter 吗?