Comment faire pour extraire des objets à partir de ListView - getItemAtPosition ne fonctionne pas
J'ai un adaptateur personnalisé mis en œuvre pour mon ListView
. Comment puis-je extraire des objets à partir d'un élément de liste. Voici comment mon adaptateur personnalisé air:
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;
}
}
Voici l'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;
}
}
Voici fragment de code java à partir d'où j'appelle 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);
}
});
Et le code xml:
<?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>
Je suppose que je ne peux pas utiliser onClickListener comme il est généralement utilisé parce que je suis extendind adaptateur personnalisé. Dans ce cas, ils peuvent être un problème avec
public void onItemClick(AdapterView<?> myAdapter, View myView,
int myItemInt, long mylng)
Mais le journal dit: ClassCastException à DashboardBean.
De toute façon, je ne peux pas le fixer. Quelqu'un pourrait-il aider?
Où est exactement le ClassCastException? Exactement où voulez-vous vous joindre à l'auditeur, tout listitem ou de certains éléments à l'intérieur?
OriginalL'auteur Harsh | 2012-06-22
Vous devez vous connecter pour publier un commentaire.
La
ClassCastException
est causée par la ligne suivante dans votreOnItemClickListener
:Et c'est parce que votre adaptateur est rempli avec
DashboardBean
instances. LegetItemAtPosition
méthode retourne un objet appartenant à la structure de données de l'adaptateur fonctionne avec, pas une instance du widget graphique (TableRow
, je suppose) dont l'objet est indiqué sur. Le simple fait d'écrire:en place de la ligne fautive ferait l'affaire. Vous pouvez ensuite travailler directement avec les champs dans le
DashboardBean
objet au lieu de passer au travers deTextView
s et similaires et les éléments de l'INTERFACE utilisateur.OriginalL'auteur Giulio Piancastelli
Vous devriez être en mesure d'obtenir votre DashboardBean objet dans onItemclick comme ceci:
OriginalL'auteur Jules Colle
Si vous voulez juste pour extraire l'objet, puis
OnItemClickListener
rend votre tâche plus facile.Vous ger instance de vue de la ligne.de ce que vous pouvez extraire le contenu.Changement
À Ce
OriginalL'auteur Vipul Shah