Basically, I would like to implement a GridView
wherein the items themselves are clickable, but within the GridView
are clickable Button
s and Checkbox
es.
Here's a sample layout:
Gridview
-----------------------------------------
|[ImageView] |[ImageView] |
|[TextView] |[TextView] |
|[Button][Checkbox] |[Button][Checkbox] |
-----------------------------------------
|[ImageView] |[ImageView] |
|[TextView] |[TextView] |
|[Button][Checkbox] |[Button][Checkbox] |
-----------------------------------------
Basically, what i want to do is, when the user clicks the CheckBox
, multiple items can now be selected from the GridView
. When the users clicks the Button
, A Popup
is shown. When the user clicks anywhere else, a new Activity
is started. The whole point of this is instead of long-pressing to show the context menu, I would like a button to take its place.
Any suggestions on how I can approach this scenario? In my current setup, if I add the Button
within the adapter's GetView()
method, only the Button
is clickable. The whole GridView
item is not clickable. When I remove the Button
, the GridView
item is clickable again. It seems that it's only the whole GridView
Item or the Button
is clickable (responds to OnClickListener()
. Is there a way to make them both clickable?
This post is old, but just for reference/googlers, I have the following solution:
You need to write all the events for buttons, checkboxes in getView of the imageAdapter only. Then in your layout.xml file under the gridview tag add these lines:
android:clickable="true"
android:descendantFocusability="beforeDescendants"
and add these lines to your button and checkboxes:
android:focusable="false"
android:focusableInTouchMode="false"
And if you want some other activity to start if any other area of the gridview item is clicked/touched you would need to use the (standard code)/(your own matching implementation):
GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(this));
gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
Toast.makeText(HelloGridView.this, "" + position, Toast.LENGTH_SHORT).show();
}
Cheers, });
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With