ファイアベースをバックエンドとして使用してチャットアプリケーションを作成しています。 現在、RecyclerViewでメッセージを送受信するためのアイテムレイアウトを設定する際に問題が発生しています。 送信と受信の両方のメッセージに同じアイテムレイアウトを使用しても、完全に機能しました。 しかし、メッセージを送信するために画面を左側の部分とメッセージを受信する右側の部分に分割したいと考えています。 FirebaseRecyclerAdapterオブジェクトを作成するとき、そのパラメータとして1つのレイアウトしか渡すことができません。私はこの問題に本当に苦労しています。チャットアプリケーションの2つのアイテムレイアウトにFirebaseRecyclerAdapterを使用するには
private void loadMessages() {
mAdapter = new FirebaseRecyclerAdapter<MessageToSend, NewMessageViewHolder>(
MessageToSend.class,
R.layout.single_message_new,
NewMessageViewHolder.class,
messageRef.child(sender).child(receiver)
) {
@TargetApi(Build.VERSION_CODES.M)
@Override
protected void populateViewHolder(NewMessageViewHolder viewHolder, MessageToSend model, int position) {
if (sender.equals(model.getSender())) {
viewHolder.outMessage.setTextColor(getResources().getColor(R.color.darkGreen));
}
else {
viewHolder.outMessage.setTextColor(Color.BLACK);
//viewHolder.outMessage.setGravity(Gravity.RIGHT);
}
viewHolder.outMessage.setText(model.getMessage());
viewHolder.sender.setText(model.getSender());
}
};
mAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
@Override
public void onItemRangeInserted(int positionStart, int itemCount) {
super.onItemRangeInserted(positionStart, itemCount);
int friendlyMessageCount = mAdapter.getItemCount();
int lastVisiblePosition = mLinearlayoutManager.findLastCompletelyVisibleItemPosition();
// If the recycler view is initially being loaded or the user is at the bottom of the list, scroll
// to the bottom of the list to show the newly added message.
if (lastVisiblePosition == -1 ||
(positionStart >= (friendlyMessageCount - 1) && lastVisiblePosition == (positionStart - 1))) {
recyclerView.scrollToPosition(positionStart);
}
}
});
recyclerView.setLayoutManager(mLinearlayoutManager);
recyclerView.setAdapter(mAdapter);
}
ViewHolderクラスは
public static class InMessageViewHolder extends RecyclerView.ViewHolder{
TextView inMessage;
TextView receiver;
CircleImageView receiverImage;
public InMessageViewHolder(View itemView) {
super(itemView);
inMessage = (TextView) itemView.findViewById(R.id.textView11);
receiver = (TextView) itemView.findViewById(R.id.textView12);
}
}
onCreateViewHolderオーバーライドするよう
-1することができ模型レイアウトの世話をしてください?それはloadMessages()で匿名であるべきですか? isSenderメソッドからboolを返すには、渡された位置パラメータと比較する必要がありますか? –
例isSenderメソッドを含めるように私の答えを更新しました。 –
は正解ですか? –