onItemClickListener with custom adapter and listview

37,172

Solution 1

I think it's the similar problem like this.

Add below code to your TextView in the XML

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

and try again.

Solution 2

First of All for this you have to impliments the class with the following handler

implements  OnItemClickListener 

then add a function as given below onItemClick()

public void onItemClick(AdapterView parent, View v, int position, long id) {
  Toast.makeText(getApplicationContext(), "hello", Toast.LENGTH_SHORT).show();   
}

And when we set the data adapter to the listview then add the following line of code

itemlist.setOnItemClickListener(this);

Hope this will work for you...

Solution 3

I have same issue and I fix it by do like:(refer from https://github.com/sephiroth74/HorizontalVariableListView/issues/33 ) add this line in root view in layout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/moduleBox"
android:id="@+id/moduleBoxSingle"
android:descendantFocusability="blocksDescendants" >
Share:
37,172
mwrazam
Author by

mwrazam

Updated on September 20, 2020

Comments

  • mwrazam
    mwrazam over 3 years

    I am trying to set an onItemClickListener with a custom adapter and listview setup. Can't seem to get the listener working. I don't think I am setting it up properly. Any help is appreciated. Thanks very much.

    Adapter:

    public class ModuleAdapter extends ArrayAdapter<Module> {
    
    Context context;
    int layoutResourceId;
    Module data[];
    
    public ModuleAdapter(Context context, int layoutResourceId,
            Module data[]) {
        super(context, layoutResourceId, data);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.data = data;
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        ModuleHolder holder = null;
    
        if(row == null)
        {
            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);
    
            holder = new ModuleHolder();
            holder.modJapTitle = (TextView)row.findViewById(R.id.moduleJapTitle);
            holder.modEngTitle = (TextView)row.findViewById(R.id.moduleEngTitle);
            holder.modComp = (TextView)row.findViewById(R.id.moduleCompletion);
            holder.modRating = (RatingBar)row.findViewById(R.id.moduleScore);
    
            row.setTag(holder);
        }
        else
        {
            holder = (ModuleHolder)row.getTag();
        }
    
        Module module = data[position];
        holder.modJapTitle.setText(module.moduleJapaneseTitle);
        holder.modEngTitle.setText(module.moduleEnglishTitle);
        holder.modComp.setText(module.moduleCompletionRate);
        holder.modRating.setRating(module.moduleRating);
    
        return row;
    }
    
    static class ModuleHolder
    {
        TextView modEngTitle;
        TextView modJapTitle;
        TextView modComp;
        RatingBar modRating;
    }
    

    }

    Implementation:

    ModuleAdapter moduleData = new ModuleAdapter(this, R.layout.module_box_item, module_data);
        ListView listView1 = (ListView)findViewById(R.id.moduleListContainer);
        listView1.setAdapter(moduleData);
        listView1.setCacheColorHint(Color.TRANSPARENT);
        listView1.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Log.v("Module Item Trigger", "Module item was triggered");
                Toast.makeText(getApplicationContext(), "hello", Toast.LENGTH_SHORT).show();
            }
        });
    

    Also here is the XML Layout for one of the single items in the list:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/moduleBox"
    android:id="@+id/moduleBoxSingle" >
    
    <TextView
        android:id="@+id/moduleJapTitle"
        style="@style/moduleTitleJap" />
    <TextView
        android:id="@+id/moduleCompletion"
        android:layout_above="@+id/moduleSepartor"
        style="@style/moduleCompletion" />
    <View
        android:id="@+id/moduleSepartor"
        android:layout_below="@+id/moduleJapTitle"
        style="@style/moduleSeperator" />
    <TextView
        android:id="@+id/moduleEngTitle"
        android:layout_below="@+id/moduleSepartor"
        style="@style/moduleTitleEng" />
    <RatingBar
        android:id="@+id/moduleScore"
        android:layout_below="@+id/moduleSepartor"
        style="@style/moduleRating"
        android:layout_alignParentRight="true" />
    
    </RelativeLayout>