ListView中的ListView和按钮

时间:2010-06-15 14:02:13

标签: android listview button

我想在Button内显示ListView。 目标应该是点击ListView行或按钮。

单击显示更多信息的行。 点击底部更多按钮显示的按钮。

与GMAIL应用程序相同。

在右侧有一个复选框,点击底部的复选框后,会出现按钮栏。

我的问题是在将按钮插入ListView后,该按钮无法点击。 如果我从按钮LinearLayout添加到llButton.setClickable(),则可以使用。但是,只有按钮。 ListView本身不再对点击作出反应!

我试过this example

与上述相同的问题......

5 个答案:

答案 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);
    .....
}