Ich versuche zu entwickeln und Android-App und ich habe einen benutzerdefinierten Adapter für eine ListView, die Inhalte zu ändern, wenn der Benutzer eine andere Option aus einer segmentierten ändert Gruppe.Benutzerdefinierte ListView aktualisiert nur bei der ersten Aktion, kein Inhalt wird bei der zweiten Aktion angezeigt
Es funktioniert zunächst, so dass die segmentierte Steuerung geändert wird und der Inhalt korrekt angezeigt wird. Bei einer zweiten Auswahl wird jedoch kein Inhalt angezeigt, obwohl alle Daten verfügbar sind.
Alle Ratschläge, wie Sie den Adapter richtig stark würde aktualisieren sein geschätzt
-Code der Adapter und Listview-Daten
SegmentedButtonGroup segmentedButtonGroup = (SegmentedButtonGroup)
findViewById(R.id.segmented_button_group);
segmentedButtonGroup.setOnClickedButtonPosition(new
SegmentedButtonGroup.OnClickedButtonPosition() {
@Override
public void onClickedButtonPosition(int position) {
Toast.makeText(listing_see.this, "Clicked: " + position,
Toast.LENGTH_SHORT).show();
// Need to make this update the list view on click
if(position == 0){
adapter.clear();
adapter = new CustomListAdapter(listing_see.this, titles1,
allThumbnails1, blurbs1);
adapter.notifyDataSetChanged();
list.setAdapter(adapter);
} else if (position == 1){
adapter.clear();
adapter = new CustomListAdapter(listing_see.this, titles2,
allThumbnails2, blurbs2);
adapter.notifyDataSetChanged();
list.setAdapter(adapter);
} else if (position == 2){
adapter.clear();
adapter = new CustomListAdapter(listing_see.this, titles3,
allThumbnails3, blurbs3);
adapter.notifyDataSetChanged();
list.setAdapter(adapter);
}
}
});
listingview.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<ImageView
android:id="@+id/icon"
android:layout_width="110dp"
android:layout_height="80dp"
android:padding="5dp" />
<LinearLayout android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
android:padding="2dp"
android:textColor="#33CC33" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
android:layout_marginLeft="10dp"/>
</LinearLayout>
</LinearLayout>
CustomListAdapter
zu ändernpublic class CustomListAdapter extends ArrayAdapter<String> {
private final Activity context;
private final List<String> itemname;
private final List<String> imgid;
private final List<String> blurbs;
public CustomListAdapter(Activity context, List<String> itemname, List<String> imgid, List<String> blurbs) {
super(context, R.layout.listingview, itemname);
this.context=context;
this.itemname=itemname;
this.imgid=imgid;
this.blurbs=blurbs;
}
public View getView(int position,View view,ViewGroup parent) {
LayoutInflater inflater=context.getLayoutInflater();
View rowView=inflater.inflate(R.layout.listingview, null,true);
TextView txtTitle = (TextView) rowView.findViewById(R.id.item);
ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
TextView extratxt = (TextView) rowView.findViewById(R.id.textView1);
int imageID = getContext().getResources().getIdentifier(imgid.get(position), "drawable", context.getPackageName());
txtTitle.setText(itemname.get(position));
imageView.setImageResource(imageID);
extratxt.setText(blurbs.get(position));
return rowView;
};
}
Einige Screenshots des Simulators zu zeigen, was passiert: gesehen
Initial Load-Displays, wie erwartet, ein Klick auf ein anderes Register richtig angezeigt wird das erste Mal, und dann bewirkt, dass ein anderes Register Auswahl keine Daten zu.
Hallo, vielen Dank für Ihre Antwort. Das einfache Hinzufügen funktioniert nicht für meine Situation, da ich 3 Werte für das Objekt übergebe, da meine Liste einen Titel, einen Klappentext und eine Miniaturansicht (als String) enthält. Ich denke, dass dies in meinem CustomListAdapter überladen werden muss, um arbeiten zu können, aber ich bin nicht ganz sicher, wie ich das erreichen kann. – Ashley
Nach weiterem Nachdenken über das Problem, vielleicht, wenn ich die 3 Elemente, die ich übergeben, in ein Objekt und übergebe das Objekt übergeben, ändern Sie den CustomListAdapter Konstruktor es funktioniert möglicherweise mit, was Sie vorgeschlagen. – Ashley
können Sie Builder based Setter erstellen, um Elemente hinzuzufügen, oder Sie können eine Methode mit 3 Argumenten erstellen. –