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