我想在Button
内显示ListView
。
目标应该是点击ListView
行或按钮。
单击显示更多信息的行。 点击底部更多按钮显示的按钮。
与GMAIL应用程序相同。
在右侧有一个复选框,点击底部的复选框后,会出现按钮栏。
我的问题是在将按钮插入ListView
后,该按钮无法点击。
如果我从按钮LinearLayout
添加到llButton.setClickable()
,则可以使用。但是,只有按钮。 ListView
本身不再对点击作出反应!
我试过this example。
与上述相同的问题......
答案 0 :(得分:120)
只是为了说明这一点 - 似乎没有人说过这么简单的事情 - 虽然不允许有一个可聚焦的按钮与列表视图一起工作,但是有一个更简单的解决方案。
接受的答案是给定的 - 在设置列表项的点击监听器时应该始终这样做,因此OP不知道这是愚蠢的。
如果您使用XML布局作为列表项,只需将按钮设置为具有以下属性,它也会使列表项也可以点击:
android:focusable="false"
答案 1 :(得分:18)
将以下行添加到列表项XML。
android:descendantFocusability="blocksDescendants"
然后你的列表项将是这样的:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:descendantFocusability="blocksDescendants"
android:layout_height="wrap_content" >
// Your layout objects here
</RelativeLayout>
答案 2 :(得分:8)
如果您使用的是自定义适配器,则单击ListView内的按钮将无效,因此您应尝试使用以下代码检查OnItemClickListener
。
listId.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> list, View v, int pos, long id) {
// Your code for item clicks
}
});
答案 3 :(得分:7)
要在单击按钮或列表项时触发事件,您可以执行以下操作:
您只处理onItemClick:
mListView.setOnItemClickListener(new ListView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int i, long l) {
// handle click here
}
);
在适配器中,您将按钮修改为不可点击/可聚焦(或者在xml文件中执行此操作):
public class MyAdapter extends BaseAdapter {
...
public View getView(int position, View convertView, ViewGroup parent) {
.....
Button btn = view.findViewById(R.id.button);
btn.setFocusable(false);
btn.setClickable(false);
}
}
答案 4 :(得分:0)
在我的情况下,我必须在listView中添加此属性:
<ListView
...
android:clickable="true"
...
</ListView>
在适配器中,只需在按钮视图中添加点击监听器。
wrapper.getButtonHi().setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
DebugUtils.logDebug("Clickeado :: "+ mContact.getUserId());
}
});
设置最终变量非常重要:
public View getRowView(final int position, View convertView, ViewGroup parent) {
final BrowseContactItemWrapper wrapper;
final UserModel mContact = lstContact.get(position);
.....
}