Je suis confronté à une erreur étrange où recyclerview n'affiche qu'un seul élément. Voici le code de mon adaptateur recyclerview:
public class ChatAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
List<chat> chats;
String username;
final int My=0,Their=1;
public ChatAdapter(List<chat> chats) {
this.chats = chats;
this.username = PushApp.getApp().getSPF().getStringData(Constants.ANAME);
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
RecyclerView.ViewHolder viewHolder;
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
switch (viewType) {
case My:
View v1 = inflater.inflate(R.layout.my_chat_child, parent, false);
viewHolder = new MyChatHolder(v1);
break;
case Their:
View v2 = inflater.inflate(R.layout.their_chat_child, parent, false);
viewHolder = new TheirMessageHolder(v2);
break;
default:
View v = inflater.inflate(R.layout.my_chat_child, parent, false);
viewHolder = new MyChatHolder(v);
break;
}
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
switch (holder.getItemViewType()) {
case My:
MyChatHolder myChatHolder = (MyChatHolder) holder;
myChatHolder.setMyMessage(chats.get(position).getMessage());
break;
case Their:
TheirMessageHolder theirMessageHolder = (TheirMessageHolder) holder;
theirMessageHolder.setTheirChat(chats.get(position).getFrom(), chats.get(position).getMessage());
break;
}
}
@Override
public int getItemViewType(int position) {
if(username.equalsIgnoreCase(chats.get(position).getFrom()))
return My;
return Their;
}
@Override
public int getItemCount() {
return chats.size();
}}
J'ai déjà utilisé ce code dans une autre application et cela fonctionne parfaitement. J'ai vérifié les données des chats qui sont également parfaites.
Voici le lien vers les fichiers de mise en page git repo: fichiers de mise en page
android
android-recyclerview
recycler-adapter
Rujul1993
la source
la source
wrap_content
au lieu dematch_parent
pour la hauteur et la largeur dans vos mises en page github.com/revic1993/androidchat/blob/master/app/src/main/res /Réponses:
Ne pas utiliser
match_parent
pour la hauteur de la vue de votre article. Un élément remplit tout l'écran verticalement pour que vous n'en voyiez pas un autre.la source
Button
placés avantRecyclerView
. Aucune suggestion?lorsque vous créez row.xml pour recyclerview, vous devez suivre les étapes suivantes:
Utilisez toujours "wrap_content" pour la hauteur de la ligne sinon dans "match_parent", il occupera tout l'écran pour une seule ligne.
Vous pouvez également prendre la hauteur en dp.
la source
Essayez de changer la mise en page utilisée dans la vue de vos éléments en
FrameLayout
. Voici un exemple.la source
Mon erreur a été que j'ai utilisé accidentellement:
au lieu de:
la source
1) si votre vue de recyclage est verticale, réglez la hauteur de la vue de recyclage
match_parent
et larow_item.xml
hauteur égalementmatch_parent
2) si votre vue recyclée est horizontale, définissez également la largeur de la vue recyclée
match_parent
et larow_item.xml
largeurmatch_parent
par exemple: - Horizontal RecyclerView
row_item.xml
la source
content_main.xml comme suit
Le fichier IN row_list.xml apporte les modifications suivantes
Je fais ci-dessus les modifications qu'il exécute.
la source