Stack Overflow на русском Asked on August 30, 2021
Всем доброго времени суток! Столкнулся с такой вот траблой: после создания List’а с данными, загона его в адаптер и использования его в RecycleView список отображается, но отображается лишь первый элемент. С чем это может быть связано? Код приведён ниже
Функция-парсер. Работает с элементами класса OneMessage, чьи главные характерристики это позиция (начинается с единицы, получают через функция getPos() ) и текст (получают функцией getText() )
ArrayList<OneMessage> messages_its;
//парсер сообщений для ListView
void parser(OneMessage[] its, OneMessage[] your) {
OneMessage allcombine[] = new OneMessage[its.length+your.length];
if (its != null) {
for (int i = 0; i < its.length; i++) {
if (its[i].getPos()-1 == i) {
allcombine[i]=new OneMessage(its[i].getPicture(),its[i].getText(),42,its[i].getVoice_text(),its[i].getFile(),its[i].getVoice(),its[i].getFilereso(),Color.rgb(12,230,45));
Log.i("SIZE", String.valueOf(allcombine.length));
}
}
Log.i("Он отправил сообщений", new String(String.valueOf(its.length)));
}
if(your!=null) {
for (int i = 0; i < your.length; i++) {
if (your[i].getPos()-1 == i)
allcombine[i]=new OneMessage(your[i].getPicture(),your[i].getText(),42,your[i].getVoice_text(),your[i].getFile(),your[i].getVoice(),your[i].getFilereso(),Color.rgb(123,24,90));
//messages_its.add(new OneMessage(your[i].getPicture(),your[i].getText(),42,null,null,null,null,3200456));
}
Log.i("Ты отправил сообщений",new String(String.valueOf(your.length)));
Log.i("Пример сообщения:",its[0].getText());
Log.i("ТЫ СЛАЛ",your[0].getText());
}
messages_its =new ArrayList<OneMessage>(Arrays.asList(allcombine));
recyclerView.setLayoutManager(new LinearLayoutManager(this));
MessageAdapter messageadapter = new MessageAdapter(this,messages_its);
if(messages_its!=null) Log.i("SIZE",String.valueOf(messages_its.size()));
recyclerView.setAdapter(messageadapter);
Log.i("SETED", "SUCCESFULL");
}
Код адаптера
package com.example.sttmmessenger;
import android.annotation.SuppressLint;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.List;
public class MessageAdapter extends RecyclerView.Adapter<MessageAdapter.ViewHolder> {
private LayoutInflater inflater;
private List<OneMessage> phones;
MessageAdapter(Context context, List<OneMessage> phones) {
this.phones = phones;
this.inflater = LayoutInflater.from(context);
}
@Override
public MessageAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.custom_messages, parent, false);
return new ViewHolder(view);
}
@SuppressLint("ResourceAsColor")
@Override
public void onBindViewHolder(MessageAdapter.ViewHolder holder, int position) {
OneMessage phone = phones.get(position);
if(phone!=null){
holder.textpartview.setText(phone.getText());
holder.textpartview.setBackgroundColor(phone.getCol());
Log.i("TEXT", phone.getText());
}
}
public int getItemCount(){
return phones.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
final TextView textpartview;
ViewHolder(View view) {
super(view);
textpartview = (TextView) view.findViewById(R.id.name);
}
}
}
Код самого элемента списка (XML-разметка)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="16dp">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#F1FDFB"
android:focusable="auto"
android:fontFamily="sans-serif-medium"
android:textSize="18sp" />
</LinearLayout>
</LinearLayout>
Который день маюсь с этой проблемой, всё не получается её решить. Причем поведение всегда разное, то показывается элемент массива its, то элемент массива your. Если смотреть по логам, все данные приходят, все длины соблюдены. .Заранее спасибо за вашу помощь
PS парсер работает по следующему принципу: есть собственно 2 массива, в каждом сообщения от каждой из сторон. Циклом гоняем, если i равна позиции сообщения – 1 (так как позиции начинаются с единицы), то пишем в i-ю ячейку общего массива данные из соответствующей ячейки массива. Не может быть такого, что 2 разных сообщения имеют одну позицию, отчего и можно так заполнять один
PS 2: вот то, что приходит с севера. показывается, что такое pos
{
"status": "SUC",
"Your": [
{
"picture": null,
"text": "Привет! Как дела7",
"pos": 1,
"voice_text": "none",
"file": null,
"voice": "nil",
"filereso": null
},
{
"picture": null,
"text": "zaebumba!",
"pos": 3,
"voice_text": "none",
"file": null,
"voice": "nil",
"filereso": null
},
{
"picture": null,
"text": "rad za tebia",
"pos": 4,
"voice_text": "none",
"file": null,
"voice": "nil",
"filereso": null
}
],
"its": [
{
"picture": null,
"text": "да нормально всё, в общем)",
"pos": 2,
"voice_text": "none",
"file": null,
"voice": "nil",
"filereso": null
}
]
}
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP