I've a custom adapter implemented for my ListView
. How do I extract objects from a particular list item. Here's how my custom adapter looks:
MyCustomAdapter.java
public class MyCustomAdapter extends ArrayAdapter<DashboardBean> {
Context context;
int layoutResourceId;
DashboardBean currentMRB;
Vector<DashboardBean> data;
public MyCustomAdapter(Context context, int layoutResourceId, Vector<DashboardBean> 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;
MyStringReaderHolder holder;
if(row==null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent,false);
holder= new MyStringReaderHolder();
holder.project = (TextView)row.findViewById(R.id.project);
holder.workRequest = (TextView)row.findViewById(R.id.work_request);
holder.startDate = (TextView)row.findViewById(R.id.start_date);
holder.status = (TextView) row.findViewById(R.id.status);
row.setTag(holder);
}
else
{
holder=(MyStringReaderHolder) row.getTag();
}
DashboardBean mrb =data.elementAt(position);
System.out.println("Position="+position);
holder.project.setText(mrb.project);
holder.workRequest.setText(mrb.workRequest);
holder.startDate.setText(mrb.startDate);
holder.status.setText(mrb.status);
return row;
}
static class MyStringReaderHolder {
TextView project, workRequest, startDate, status;
}
}
Here's the DashboardBean.java
public class DashboardBean {
public String project;
public String workRequest;
public String startDate;
public String status;
public DashboardBean(String project,String workRequest,String startDate,String status)
{
this.project = project;
this.workRequest = workRequest;
this.startDate = startDate;
this.status = status;
}
}
Here's java snippet from where I call onClickListener() :
mListView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> myAdapter, View myView,
int myItemInt, long mylng) {
TableRow tableRow = (TableRow) (mListView.getItemAtPosition(myItemInt));
String project = ((TextView) tableRow.findViewById(R.id.project)).getText().toString();
String workRequest = ((TextView) tableRow.findViewById(R.id.work_request)).getText().toString();
String startDate = ((TextView) tableRow.findViewById(R.id.start_date)).getText().toString();
String status = ((TextView) tableRow.findViewById(R.id.status)).getText().toString();
showWorkRequest(project, workRequest, startDate, status);
}
});
And the xml code:
<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tabRow1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@style/BodyRow"
android:gravity="center_horizontal" >
<RelativeLayout
android:id="@+id/relativeLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_horizontal" >
<TextView
android:id="@+id/status"
android:layout_width="wrap_content"
style="@style/BodyText"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:textColor="@color/textColor"
android:text="TextView" />
<TextView
android:id="@+id/start_date"
style="@style/HourText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="TextView" android:textColor="@color/textColor" android:textSize="10sp"/>
<TextView
android:id="@+id/project"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/start_date"
android:gravity="center_horizontal"
style="@style/LeftHeaderText"
android:text="TextView" android:layout_marginLeft="5dp"
android:textColor="@color/textColor" android:textStyle="bold"/>
<TextView
android:id="@+id/work_request"
android:layout_width="wrap_content"
style="@style/BodyText"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/project"
android:layout_below="@+id/project"
android:text="TextView"
android:textColor="@color/textColor" />
</RelativeLayout>
</TableRow>
I guess I can't use onClickListener as it is usually used because I'm extendind custom adapter. In that case they may be a problem with
public void onItemClick(AdapterView<?> myAdapter, View myView,
int myItemInt, long mylng)
But the log says: ClassCastException at DashboardBean.
Anyway, I can't fix it. Could anyone help?
The ClassCastException
is caused by the following line in your OnItemClickListener
:
TableRow tableRow = (TableRow) (mListView.getItemAtPosition(myItemInt));
And that's because your adapter is filled with DashboardBean
instances. The getItemAtPosition
method returns an object belonging to the data structure the adapter works with, not an instance of the graphic widget (TableRow
, I assume) which the object is shown on. Just writing:
DashboardBean board = (DashboardBean) (mListView.getItemAtPosition(myItemInt));
in place of the offending line would do the trick. You can then work directly with the fields in the DashboardBean
object instead of passing through TextView
s and similar UI elements.
You should be able to get your DashboardBean object in onItemclick like this:
DashboardBean bean = (DashboardBean) mListView.getItemAtPosition(myItemInt);
If you just want to extract object then OnItemClickListener
makes your task easier.You ger view instance of the row.from that you can extract the contents.
Change
mListView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> myAdapter, View myView,
int myItemInt, long mylng) {
TableRow tableRow = (TableRow) (mListView.getItemAtPosition(myItemInt));
String project = ((TextView) tableRow.findViewById(R.id.project)).getText().toString();
String workRequest = ((TextView) tableRow.findViewById(R.id.work_request)).getText().toString();
String startDate = ((TextView) tableRow.findViewById(R.id.start_date)).getText().toString();
String status = ((TextView) tableRow.findViewById(R.id.status)).getText().toString();
showWorkRequest(project, workRequest, startDate, status);
}
});
To This
mListView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView <? > myAdapter, View myView, int myItemInt, long mylng) {
String project = ((TextView) myView.findViewById(R.id.project)).getText().toString();
String workRequest = ((TextView) myView.findViewById(R.id.work_request)).getText().toString();
String startDate = ((TextView) myView.findViewById(R.id.start_date)).getText().toString();
String status = ((TextView) myView.findViewById(R.id.status)).getText().toString();
showWorkRequest(project, workRequest, startDate, status);
}
});
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