0

Je récupère des données du serveur en utilisant JSON et montre ces données dans la vue recycleur. Mais le problème est que je devrais ajouter de nouvelles données au serveur. En utilisant volée, la requête sera envoyée au serveur et la liste d'affichage du recycleur sera mise à jour. Donc, le problème est que je veux ouvrir une nouvelle activité sur chaque clique de l'item recycleur. Mais ma liste d'affichage recycleur augmentera si j'ai ajouté de nouvelles données au serveur. Donc, je ne peux pas modifier l'activité de mise en page/démarrage en fonction de la position de l'itemclick. Y a-t-il une meilleure façon de l'implémenter?Comment démarrer Activty sur Recycler voir l'article click?

Tout comme whatsapp, je veux ouvrir une nouvelle activité/fragment sur itemclick de la vue recycleur.

Ce que j'ai essayé de faire mais ce n'est pas correct. Coz je ne sais pas combien d'éléments seront présents dans recyclerview. Voici mon code:

private final Context context; 

public MyViewHolder(View itemView) { 
    super(itemView); 
    context = itemView.getContext(); 

} 

    @Override 
public void onClick(View v) {   

    final Intent intent; 
    switch (getAdapterPostion()){ 
     case 0: 
      intent = new Intent(context, FirstActivity.class); 
      break; 

     case 1: 
      intent = new Intent(context, SecondActivity.class); 
      break; 
      ... 
     default: 
      intent = new Intent(context, DefaultActivity.class); 
      break; 
    } 
    context.startActivity(intent); 
} 
+0

Vous pouvez ajouter getAdapterPostion() int dans l'intention en utilisant putExtra, puis récupérez-le dans l'activité et apportez des modifications au sein de l'activité en fonction de f l'int? – jak10h

Répondre

0

Si vous essayez de reproduire la fonctionnalité de WhatsApp attention que lorsque vous cliquez sur un élément sur une liste l'application ne sera pas ouvrir une nouvelle activité, elle ouvrira la même activité envoyer différents données pour charger les données pour cet utilisateur spécifique.

... 
Intent intent = new Intent(context, Chat.class); 
intent.putExtra("EXTRA_USER_ID", userId); 
startActivity(intent); 
... 

Sur le Chat.class

... 
Intent intent = getIntent(); 
String userId = intent.getStringExtra("EXTRA_USER_ID"); 
... 

En utilisant cet identifiant d'utilisateur que vous pouvez charger des données pour cet utilisateur spécifique.

+0

Mais comment obtenir des données particulières si je cliquais sur un élément particulier en mode liste? – Abhishek

+0

J'ai mis à jour ma réponse, voir si cela vous aide. –

0

une approche appropriée utilise une interface dans votre classe d'adaptateur:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { 
    private List<Item> items; 
    private final OnItemClickListener listener; 

    public interface OnItemClickListener { 
     void onItemClick(Item item); 
    } 

public static class MyViewHolder extends RecyclerView.ViewHolder { 

     public void bind (final Item item, final OnItemClickListener listener) { 

      yourclickableView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        listener.onItemClick(item); 
       } 
      }); 
     } 
    } 

public MyAdapter(List<Item> items, OnItemClickListener listener) { 
     ... 
     this.listener = listener; 
     items = items; 
    } 

et enfin:

@Override 
public void onBindViewHolder(MyViewHolder holder, int position) { 
     holder.bind(items.get(position), listener); 
     ... 
    } 

et lorsque vous utilisez votre classe d'adaptateur:

myAdapter = new MyAdapter (itemsList, new MyAdapter.OnItemClickListener(){ 
       @Override 
       public void onItemClick(Item item) { 
        //bluh bluh... 
       } 
      });