Как создать RecyclerView Adapter для приложения чата? - PullRequest
0 голосов
/ 15 июня 2019

Я пытался сделать приложение для чата для Android, поэтому я использовал RecyclerView для него.У меня проблема с адаптером, в моей комнате чата не отображается ответ JSON, который они получают.Я что-то пропустил в своем коде?

Вот мой класс адаптера

public class PesanRecycleAdapter extends RecyclerView.Adapter<PesanRecycleAdapter.ViewHolder> {


private String username;
private Context context;

private int SELF = 786;

private ArrayList<Pesan> pesan;

public PesanRecycleAdapter(Context context, ArrayList<Pesan> pesan, String username){
    this.username = username;
    this.pesan = pesan;
    this.context = context;
}

@Override
public int getItemViewType(int position) {

    Pesan psn = pesan.get(position);

    if (psn.getUsernameFrom() == username) {
        return SELF;
    }

    return position;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView;
    if (viewType == SELF) {
        itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.chat_thread_me, parent, false);
    } else {
        itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.chat_thread_other, parent, false);
    }
    return new ViewHolder(itemView);
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    Pesan psn = pesan.get(position);
    holder.textViewMessage.setText(psn.getPesan());
    holder.textViewTime.setText(psn.getSentAt());
}


@Override
public int getItemCount() {
    return pesan.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {
    public TextView textViewMessage;
    public TextView textViewTime;

    public ViewHolder(View itemView) {
        super(itemView);
        textViewMessage = (TextView) itemView.findViewById(R.id.textViewMessage);
        textViewTime = (TextView) itemView.findViewById(R.id.textViewTime);
    }
}
}

Любая помощь или предложение приветствуются

И здесь, где я использовал этот адаптер при работе

public void getpesan() {
    try {

        apiservice.get_pesan(username, "ahnafgg").enqueue(new Callback<ResponPesan>() {
            @Override
            public void onResponse(Call<ResponPesan> call, Response<ResponPesan> response) {

                Log.d(TAG, "onResponse: response..."+response);

                dummyData = response.body().getPesan();
                createRecycleView();
            }
            @Override
            public void onFailure(Call<ResponPesan> call, Throwable t) {

                Log.d(TAG, "onFailure: response...");
                Toast.makeText(RuangPesan.this,"Gagal ambil chat",Toast.LENGTH_SHORT).show();
            }
        });

    } catch (Exception ex) {
        ex.printStackTrace();
    }
}


public  void createRecycleView(){
    adapter = new PesanRecycleAdapter(RuangPesan.this, pesan, username);
    recyclerView.setAdapter(adapter);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    Log.d(TAG, "********************************");
    scrollToBottom();
}

Ответы [ 2 ]

0 голосов
/ 15 июня 2019

Возможно, вы забыли установить дату в модели перед инициализацией представления переработчика. Используйте следующий способ из вашего класса активности:

    initData(); //Do this first
    RecyclerView recyclerView = findViewById(R.id.recyclerview);

    Context context = MainActivity.this;
    PesanRecycleAdapter pesanRecycleAdapter = new PesanRecycleAdapter(context, list,"Fahad");

    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
    recyclerView.setLayoutManager(linearLayoutManager);

    recyclerView.setAdapter(pesanRecycleAdapter);
0 голосов
/ 15 июня 2019

Я думаю, что все в порядке, может быть, вы забыли настройку layoutManager для recyclerПросмотреть или уведомить адаптер после установки данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...