2017-01-20 13 views
0

Ich mache App mit ein paar verschiedenen Kategorien von Bildern. Ich möchte diese Bilder mit RecyclerView anzeigen.Ein RecyclerAdapter für zwei Aktivitäten

Ich möchte Schaltfläche als ein Bild anzeigen, wenn ich zuvor geklickt habe. Kann ich es in einem Adapter machen? Jetzt habe ich zwei Adapter, ist, dass Code wie folgt:

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> { 
private int[] images = { 
    R.drawable.imageA1, .... R.drawable.imageA10 
}; 
private int[] images2 = { 
     R.drawable.imageB1, .... R.drawable.imageB10 
    }; 

class ViewHolder extends RecyclerView.ViewHolder{ 

    public int currentItem; 
    public ImageView itemImage, itemImage2; 
    public TextView itemTitle; 

    public ViewHolder(View itemView) { 
     super(itemView); 
     itemImage = (ImageView)itemView.findViewById(R.id.imageView); 
} 
@Override 
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
    View v = LayoutInflater.from(viewGroup.getContext()) 
      .inflate(R.layout.article_layout, viewGroup, false); 
    ViewHolder viewHolder = new ViewHolder(v); 
    return viewHolder; 
} 
@Override 
public void onBindViewHolder(ViewHolder viewHolder, int i) { 
    viewHolder.itemImage.setImageResource(images[i]); 
    } 
@Override 
public int getItemCount() { 
    return images.length; 
} 

}

+0

Am Ende habe ich es mit Erstellung separaten Adapter für jede neue Aktivität, die startet, wenn Benutzer auf Schaltflächen in meiner Startaktivität gestartet. Als jeder, der unten Kommentar machte und die Lösung vorschlug. Wenn ich mehr Erfahrung habe, werde ich es mit einem Adapter machen. – Pawel

Antwort

0

Sie müssen Bilder Array dynamisch an Ihren Adapter übergeben als sein niedrige

private int[] images = { 
    R.drawable.imageA1, .... R.drawable.imageA10 
}; 
private int[] images2 = { 
     R.drawable.imageB1, .... R.drawable.imageB10 
    }; 

auf Schaltfläche anklickt A

RecyclerAdapter myAdapter = new RecyclerAdapter(images) 
yourRecyclerview.setAdapter(myAdapter) 

auf Schaltfläche anklickt B

RecyclerAdapter myAdapter = new RecyclerAdapter(images2) 
yourRecyclerview.setAdapter(myAdapter) 

Veränderung in Ihrem Adapter wie folgt

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> { 
private int[] images = new int[]; 

public RecyclerAdapter(int[] imgs){ 
images = imgs; 
} 

class ViewHolder extends RecyclerView.ViewHolder{ 

    public int currentItem; 
    public ImageView itemImage, itemImage2; 
    public TextView itemTitle; 

    public ViewHolder(View itemView) { 
     super(itemView); 
     itemImage = (ImageView)itemView.findViewById(R.id.imageView); 
} 
@Override 
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
    View v = LayoutInflater.from(viewGroup.getContext()) 
      .inflate(R.layout.article_layout, viewGroup, false); 
    ViewHolder viewHolder = new ViewHolder(v); 
    return viewHolder; 
} 
@Override 
public void onBindViewHolder(ViewHolder viewHolder, int i) { 
    viewHolder.itemImage.setImageResource(images[i]); 
    } 
@Override 
public int getItemCount() { 
    return images.length; 
} 
} 
+0

warum Einstelladapter bei jedem Klick? – Eswar

+0

@Eswar als Pawel sagte, er möchte Liste in verschiedenen Aktivitäten in obigen Kommentar öffnen –

+0

In Ordnung. Habe diesen Kommentar nicht bemerkt – Eswar

1

Sie Methode in Adapter einstellen, die Sie aufrufen wird, wenn Benutzer Schaltfläche klickt:

// for button A 
public void setImages() { 
    this.showImages = true; 
} 

// for button B 
public void setImages2() { 
    this.showImages = false; 
} 

Dann ändern Sie Ihre auf Bind-Methode, um passende Bilder zu binden:

@Override 
public void onBindViewHolder(ViewHolder viewHolder, int i) { 
    if (this.showImages) 
     viewHolder.itemImage.setImageResource(images[i]); 
    else 
     viewHolder.itemImage.setImageResource(images2[i]); 
    } 
+0

Warum sollte er das tun? Können Sie Ihre Antwort erweitern? –

+0

Er möchte Toggle-Funktionalität in einem Adapter. Ich habe ihm nur einen Weg gezeigt, wie er es mit einfachem if-else und boolean erreichen kann. Beispiel, dass er es in Einzeladapter machen kann. – Gudin

+0

Natürlich stimme ich völlig zu, die Syntax ist perfekt. Ich habe mehr über die Informationen nachgedacht, die sowohl für die OP als auch für zukünftige Benutzer bereitgestellt wurden. –

0

Ja möglich. machen Konstruktor in adpater wie folgt aus:

public RecyclerAdapter(Context context,int[] images) 
{ 
    this.diff_images=images; 
    this.context=context; 

} 

die diff_images ist auch int Array in Adapterklasse. und machen Bilder Array in Ihrer Aktivitätsklasse. Wenn Sie Taste 1 drücken, übergeben Sie image1 array in adpater, und wenn Sie button2 drücken, übergeben Sie image2 array (wenn Sie die gleiche Ansicht für beide Fälle anzeigen möchten und für beide Bilder eine andere Ansicht anzeigen möchten)
wenn Ihr Adapter bereits eingestellt ist wie:

recycleViewAdapter = new RecyclerAdapter(this, imageArray); 
    recyclerView.setAdapter(recycleViewAdapter); 

dann können Sie auch eine weitere Methode in Adapterklasse machen und nur benachrichtigen Adapter für Update-image

public void setNewImageList(Context context, int[] imageArray) { 
    this.context = context; 
    this.diff_images = imageArray; 
    notifyDataSetChanged(); 
} 

dies versuchen.

Verwandte Themen