OnItemClickListener Not Triggered on Android GridView

26,582

Solution 1

Do not use clickable objects in the grid. In that case Android cannot handle the click event of GridView.

Instead, use something to show a similar user interface view. Then handle that object's click actions.

Don't: put Button in the GridView to perform some click actions.

Do: put an ImageView instead of ImageButton and handle ImageView's click events.

Solution 2

If you wants to use Button or ImageButton then you need to write these attributes in your xml code of the widgets.

android:focusable="false"
android:focusableInTouchMode="false"

Its works for me.

But in GridView, Try to avoid use of these widgets. You can use any other widgets in place of these (Like ImageView or any other).

Solution 3

Also make sure, that your ListAdpter returns true for

public boolean isEnabled(int _position)

for the position you want to click.

Solution 4

Hey guyz finally got a solution...

what we were doing is directly accessing the Layout inside the GridView, so the onItemClickListener finds it confusing to access the item.

So the solution is to apply the onClickListener inside the Adapter (i.e. normally ArrayAdapter)

so what i m trying to say is:

public View getView(int position, View convertView, ViewGroup parent) {

            //Here row is a view and we can set OnClickListener on this
    final View row;
    ViewHolder holder = null;

    if (convertView == null) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        //Here we inflate the layout to view (linear in my case)
        row = inflater.inflate(layoutResourceId, parent, false);
        holder = new ViewHolder();
        holder.imageTitle = (TextView) row.findViewById(R.id.text);
        holder.image = (ImageView) row.findViewById(R.id.image);
        row.setTag(holder);
    } else {
        row = convertView;
        holder = (ViewHolder) row.getTag();
    }

    ImageItem item = data.get(position);
    holder.imageTitle.setText(item.getTitle());
    holder.image.setImageBitmap(item.getImage());

    //Now get the id or whatever needed
    row.setId(position);
    // Now set the onClickListener
    row.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Toast.makeText(context, "Clicked" + row.getId() + "!!",
                    Toast.LENGTH_SHORT).show();
        }
    });
    return row;
}

Solution 5

Try to set

    android:clickable="false"
    android:focusable="false"
Share:
26,582
Olgun Kaya
Author by

Olgun Kaya

Updated on November 06, 2020

Comments

  • Olgun Kaya
    Olgun Kaya over 3 years

    I have a Gridview filled by an Adapter which returns LinearLayouts each contains an ImageButton and TextView.

    In the adapter I am binding an onClick and onLongClick event to the ImageButton.

    I am trying to bind OnItemClickListener to the gridview but I don't know why that the onItemclicked never fired up.

    It's my 6th hour without anything.

    By the way; OnItemSelectListener working perfectly on the Grid.

    I am checking if some piece of code accidentally handles the onItemClicked but couldn't catch yet.

    I need help guys.

    gridView = (GridView) layoutInflater.inflate(R.layout.gridview, null);
    gridView.setOnItemClickListener(new ItemClickListener());
    . 
    .
    .
    
    //inner handler class
    class ItemClickListener implements AdapterView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            Toast.makeText(mainActivity.getApplicationContext(),view + " clicked at pos " +            
            i,Toast.LENGTH_SHORT).show();
        }
    }