Ich habe einen seltsamen Fehler, bei dem in recyclerview nur ein einziger Artikel angezeigt wird. Unten ist der Code für meinen Recyclerview-Adapter:
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();
}}
Ich habe diesen Code bereits in einer anderen App verwendet und er funktioniert einwandfrei. Ich habe die Chat-Daten überprüft, was auch perfekt ist.
Hier ist der Link zu Git-Repo-Layoutdateien: Layoutdateien
android
android-recyclerview
recycler-adapter
Rujul1993
quelle
quelle
wrap_content
stattmatch_parent
für Höhe und Breite github.com/revic1993/androidchat/blob/master/app/src/main/res/… github.com/revic1993/androidchat/blob/master/app/src/main festzulegen / res /…Antworten:
Nicht
match_parent
für die Höhe Ihrer Artikelansicht verwenden. Ein Element füllt den gesamten Bildschirm vertikal aus, sodass Sie kein anderes sehen.quelle
Button
sie zuvor platziert wurdenRecyclerView
. Irgendwelche Vorschläge?Wenn Sie row.xml für recyclerview erstellen, sollten Sie folgende Schritte ausführen:
Verwenden Sie immer "wrap_content" für die Höhe der Zeile, da sonst in "match_parent" der gesamte Bildschirm für eine einzelne Zeile belegt wird.
Sie können die Höhe auch in dp angeben.
quelle
Versuchen Sie, das in Ihrer Elementansicht verwendete Layout in zu ändern
FrameLayout
. Hier ist ein Beispiel.quelle
Mein Fehler war, dass ich versehentlich benutzt habe:
anstatt:
quelle
1) Wenn Ihre Recyclingansicht vertikal ist, stellen Sie die Höhe der Recyclingansicht
match_parent
und dierow_item.xml
Höhe ebenfalls einmatch_parent
2) Wenn Ihre Recyclingansicht horizontal ist, stellen Sie die Breite der Recyclingansicht
match_parent
und dierow_item.xml
Breite ebenfalls einmatch_parent
Zum Beispiel: - Horizontal RecyclerView
row_item.xml
quelle
content_main.xml wie folgt
In der Datei row_list.xml werden folgende Änderungen vorgenommen
Ich mache oben Änderungen, die es läuft.
quelle