Gewusst wie: extrahieren von Objekten aus ListView - getItemAtPosition nicht funktionieren
Habe ich eine eigene adapter implementiert für meine ListView
. Wie kann ich das extrahieren von Objekten aus einer bestimmten Liste auswählen. Hier ist, wie meine benutzerdefinierte adapter aussieht:
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;
}
}
Hier ist die 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;
}
}
Hier ist java snippet von wo ich Anrufe 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);
}
});
- Und 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>
Ich denke, ich kann nicht onClickListener verwenden, wie es ist in der Regel verwendet, weil ich bin extendind eigene adapter. In diesem Fall können Sie ein problem mit
public void onItemClick(AdapterView<?> myAdapter, View myView,
int myItemInt, long mylng)
Aber die log sagt: classcastexception-Fehler bei DashboardBean.
Sowieso, ich kann es nicht reparieren. Könnte mir jemand helfen?
Wo genau ist die classcastexception-Fehler? Wo genau möchten Sie den Hörer, das ganze listitem oder bestimmte Elemente im inneren?
InformationsquelleAutor Harsh | 2012-06-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
ClassCastException
verursacht wird, indem Sie die folgende Zeile in IhreOnItemClickListener
:Und das ist, weil Ihr adapter ist gefüllt mit
DashboardBean
Instanzen. DiegetItemAtPosition
Methode gibt ein Objekt die Zugehörigkeit zu der Datenstruktur der adapter funktioniert mit nicht eine Instanz des Grafik-widget (TableRow
, nehme ich an), die das Objekt angezeigt wird. Einfach nur zu schreiben:statt die betreffende Zeile würde den trick tun. Sie können dann direkt mit den Feldern in der
DashboardBean
Objekt statt der übergabe durchTextView
s und ähnliche Elemente der Benutzeroberfläche.InformationsquelleAutor Giulio Piancastelli
Sollten Sie in der Lage sein, um Ihre DashboardBean Objekt in onItemclick wie diese:
InformationsquelleAutor Jules Colle
Wenn Sie nur wollen, zu extrahieren Objekt dann
OnItemClickListener
macht Ihre Aufgabe einfacher.Sie ger view-Instanz der Zeile.von diesem können Sie den Inhalt extrahieren.Ändern
Zu Diesem
InformationsquelleAutor Vipul Shah