ListView and Buttons inside ListView

AndroidListviewButton

Android Problem Overview


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 the line it shows more info. Click on the button it shows at the bottom more buttons.

The same as the GMAIL app.

On the right there is a checkbox and after clicking on the checkbox at the bottom, the button bar appears.

My problem is after inserting the button into the ListView, the button is not clickable. If I add the to the LinearLayout from the button llButton.setClickable() it works. But, only the button. The ListView itself doesn't react on clicks anymore!

I have tried this example.

The same issue as above...

Android Solutions


Solution 1 - Android

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"

Solution 2 - Android

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>

Solution 3 - Android

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

Solution 4 - Android

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

Solution 5 - Android

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionchrisonlineView Question on Stackoverflow
Solution 1 - AndroidflagoworldView Answer on Stackoverflow
Solution 2 - AndroidFaruk ToptasView Answer on Stackoverflow
Solution 3 - AndroidVenkyView Answer on Stackoverflow
Solution 4 - AndroidbetaView Answer on Stackoverflow
Solution 5 - AndroidKokushoView Answer on Stackoverflow