2017-01-08 3 views
0

Ich habe eine ViewPager mit 3 von vier Fragment s fast identisch sind. Sie zeigen eine GridLayout mit Bildern und Text unter jedem Bild. Ich habe den Code für einen von ihnen bereits beendet. Ich verwende einen Retrofit Dienst, um die Daten vom Server zu erhalten. Objekte sind die gleichen außer 1-2 Felder, die ich nur für die Deserialisierung benötige.Verwenden Sie den gleichen Adapter für mehrere fast ähnliche Fragmente

Beispiel eines der Objekte:

public class TagsItem implements Serializable{ 

@SerializedName("post_id") 
private String postId; 

@SerializedName("account_id") 
private int accountId; 

private String tags; 
private String description; 
private String image; 
private String name; 

// removed getters/setters for brevity 

} 

Ich brauche nur Bild und Namen aus jeder Klasse.

Ich würde gerne verwenden, wenn es möglich ist, den gleichen Adapter für jeden von ihnen, da sie kein separates Layout für jedes Element benötigen. Es ist nur Bild und Name.

Wie sollte ich den Adapter in einer allgemeineren Form erklären, damit es alle 3 verwendbar sein würde?

Momentan befindet sich der Code für den Adapter ist:

public class TagsAdapter extends RecyclerView.Adapter<TagsAdapter.ViewHolder> { 

private Context context; 
private List<TagsItem> dataset; 

public TagsAdapter(Context context) { 
    this.context = context; 
    dataset = new ArrayList<>(); 
} 

// more adapter code 

} 

Wie Sie sehen, der Name TagsAdapter und der Datensatz-Typ ist TagsItem

Antwort

1

Der einfachste Weg, dies zu tun, ist eine gemeinsame erstellen Schnittstelle für alle verschiedenen Objekte. Da Sie sagen, dass alles, was Sie brauchen die „Bild“ und „name“ Eigenschaften, wäre es wahrscheinlich so etwas wie dieses:

interface NamedImage { 
public String getImage(); 
public String getName(); 
} 

Jeder Ihrer Klassen durch den Adapter angezeigt werden, würde dann diese Schnittstelle implementieren.

Dann ändern Sie einfach Ihren Adapter, um mit NamedImage anstelle von TagsItem

zu arbeiten
Verwandte Themen