I want to display a Button
inside the ListView
.
The goal should be to click on the ListView
line or on the button.
Click on th
In my case i had to add this attribute in the listView :
<ListView
...
android:clickable="true"
...
</ListView>
And in the adapter just add on click listener in the button view.
wrapper.getButtonHi().setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
DebugUtils.logDebug("Clickeado :: "+ mContact.getUserId());
}
});
Its important to set final the variables:
public View getRowView(final int position, View convertView, ViewGroup parent) {
final BrowseContactItemWrapper wrapper;
final UserModel mContact = lstContact.get(position);
.....
}
If you are using a custom Adapter the Button click inside a ListView will not work so you should try to use the following code to check for OnItemClickListener
.
listId.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> list, View v, int pos, long id) {
// Your code for item clicks
}
});
Add the line below to your list item XML.
android:descendantFocusability="blocksDescendants"
Then your list item will be like this:
<?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>
Just to make this clear – and no one seems to have said something this simple – whilst one is not allowed to have a focusable button work in conjunction with the list view, there is a much simpler solution for this.
The accepted answer is a given - you should always do that when setting the click listener for list items, so that is silly that OP didn't know that.
If you are using an XML layout as your list item, simply set the button to have the following attribute and it will cause the list item to be clickable as well:
android:focusable="false"
To have the event be triggered when either the button or the list item is clicked, you can do the following:
You handle only onItemClick:
mListView.setOnItemClickListener(new ListView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> a, View v, int i, long l) {
// handle click here
}
);
In the adapter you modify the button to not be clickable/focusable (or do this in the xml file instead):
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);
}
}