getView () - Methode von ArrayAdapter wiederholt die ersten zwei oder drei Einträge in der Liste
Erweiterte ich ein ArrayAdapter
mit einer überschriebenen getView()
Methode zu füllen meine ListView
Objekt, aber der adapter greifen, werden die ersten zwei oder drei Objekte aus der ArrayList
ich pass auf es, dann wiederholen Sie einfach diese in scheinbar zufälliger Reihenfolge für die gesamte Länge der Liste. Außerdem, wenn ich nach oben und unten Blättern in der ListView
einige Zeilen ändern, aus einer Liste Element zu einem anderen. Die ArrayList<Credit>
Objekt wird aufgefüllt, die aus einem JSONObject, und nach meinem besten wissen korrekt sind, bevor Sie ging in die ArrayAdapter
.
Meine custom ArrayAdapter
private class CreditArrayAdapter extends ArrayAdapter<Credit> {
private ArrayList<Credit> credits;
private int creditCount;
public CreditArrayAdapter(Context ctx, int textViewResourceId, List<Credit> items) {
super(ctx, textViewResourceId, items);
credits = (ArrayList<Credit>) items;
creditCount = credits.size();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.list_item_movie_medium, null);
Credit current = credits.get(position);
Log.d(tag, "current credit: " + current.toString());
ImageView creditPicture = (ImageView) v.findViewById(R.id.image_poster_thumbnail);
try {
creditPicture.setImageBitmap(current.getPosterSmall());
} catch(Exception e) {
Log.d(tag, "failed to set cast member picture");
e.printStackTrace();
}
TextView castMemberName = (TextView) v.findViewById(R.id.text_credit_info);
castMemberName.setText(current.toString());
}
return v;
}
@Override
public int getCount() {
return creditCount;
}
}
aufgerufen:
appearsIn = (ListView) findViewById(R.id.listview_appears_in);
List<Credit> credits = searcher.getCreditsByPersonId(personId);
CreditArrayAdapter creditAdapter = new CreditArrayAdapter(getBaseContext(), R.layout.list_item_movie_medium, credits);
creditAdapter.notifyDataSetChanged();
appearsIn.setAdapter(creditAdapter);
Das layout mit den ListView
:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_centerHorizontal="true"
android:weightSum="2">
<ScrollView android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView android:id="@+id/image_person_info"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:contentDescription="person image"/>
<TextView android:id="@+id/text_person_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30dp"/>
<TextView android:id="@+id/text_person_birth"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"/>
<TextView android:id="@+id/text_person_death"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"/>
<TextView android:id="@+id/text_person_bio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16dp"/>
</LinearLayout>
</ScrollView>
<ListView android:id="@+id/listview_appears_in"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"/>
</LinearLayout>
Meiner Liste Artikel layout:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal">
<ImageView android:id="@+id/image_poster_thumbnail"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
<TextView android:id="@+id/text_credit_info"
android:layout_height="wrap_content"
android:layout_width="fill_parent"/>
</LinearLayout>
Du musst angemeldet sein, um einen Kommentar abzugeben.
ändern Sie die getView wie diese:
Ihr problem war, Sie waren nicht zu tun, all den code, den Sie brauchte, um das View-Objekt dann korrekt, wenn convertView war != null.
convertView
war nicht null). Es war-was meinen Karten aufgefüllt werden, mit dem falschen Inhalt.Verwenden Sie dieses snippet:
versuchen, passen Sie Ihre xml-layout-auf jeder Stelle, die auf die Höhe, weil die android-tun, eine Maßnahme zu ziehen eachtime und neu gezeichnet, die Zelle wieder.
Versuchen, auf listview match_parent und auf die Zelle in Zeile genau Höhe.
tut mir Leid mein schlechtes Englisch.