ListView中的ListView和Buttons

我想在ListView显示一个Button 。 目标应该是点击ListView行或button。

点击它显示更多信息的行。 点击它在底部显示的button更多的button。

与GMAIL应用程序相同。

在右边有一个checkbox,点击底部的checkbox后,出现button栏。

我的问题是将button插入ListView ,该button不可点击。 如果我添加到buttonllButton.setClickable()LinearLayout它的作品。 但是,只有button。 ListView本身不会对点击做出反应!

我试过这个例子 。

与上面相同的问题…

如果您使用自定义适配器button单击内部ListView将无法正常工作,因此您应该尝试使用以下代码来检查OnItemClickListener

 listId.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> list, View v, int pos, long id) { // Your code for item clicks } }); 

为了清楚这一点 – 没有人似乎说过这么简单 – 虽然不允许有一个可调焦的button与列表视图一起工作,但有一个更简单的解决scheme。

接受的答案是一个给定的 – 你应该总是这样做的时候设置列表项的点击监听器,所以这是愚蠢的OP不知道。

如果使用XML布局作为列表项目,只需将该button设置为具有以下属性,并且还会导致列表项目可点击:

android:focusable="false"

将下面的行添加到您的列表项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> 

要点击button或列表项时触发事件,可以执行以下操作:

你只处理ItemClick:

 mListView.setOnItemClickListener(new ListView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> a, View v, int i, long l) { // handle click here } ); 

在适配器中,您可以将button修改为不可点击/可调焦(或者在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); } } 

在我的情况下,我不得不在listView中添加这个属性:

 <ListView ... android:clickable="true" ... </ListView> 

在适配器中,只需在button视图中添加点击监听器。

 wrapper.getButtonHi().setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub DebugUtils.logDebug("Clickeado :: "+ mContact.getUserId()); } }); 

确定最终variables的重要性:

 public View getRowView(final int position, View convertView, ViewGroup parent) { final BrowseContactItemWrapper wrapper; final UserModel mContact = lstContact.get(position); ..... }