可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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...
回答1:
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
}
});
回答2:
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"
回答3:
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>
回答4:
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);
}
}
回答5:
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);
.....
}