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>
Try this...
OR
Edited part: Change made in Toast's Context, and Added SysOut
// The method that will handle the Events.
CHECK YOU LOG.. DOES THE SYSOUT STATEMENT GETS PRINTED !!
First of All for this you have to impliments the class with the following handler
then add a function as given below onItemClick()
And when we set the data adapter to the
listview
then add the following line of codeHope this will work for you...
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
I think it's the similar problem like this.
Add below code to your
TextView
in the XMLand try again.