2017-06-24 8 views
0

特定のfirebaseデータベース参照のリスナーを登録しました。データが変更されると、トーストメッセージが表示され、チャットメッセージがリストに追加され、リサイクルビューにそのアイテムが表示されます。ただし、トーストメッセージのみが表示されますが、アイテムはリサイクルビューに追加されません。私はそれがRecycleViewアダプターの問題によって引き起こされたと信じていますが、私は場所を特定することができません。Firebase RecycleViewアダプタがnotifyDataSetChanged()の後でも更新されない

public void getMessageByMessageUUID(final MessageAdapter messageAdapter, final String chatUUID, final String messageUUID) { 
    MESSAGE_REFERENCE.child(chatUUID).child(messageUUID).addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      ChatMessage message = dataSnapshot.getValue(ChatMessage.class); 
      Toast.makeText(getApplicationContext(), 
        "Welcome " + chatUUID + " " + message.getMessageText(), 
        Toast.LENGTH_LONG) 
        .show(); 
      messageAdapter.addMessage(message); 

      messageAdapter.notifyDataSetChanged(); 
     } 

アダプタクラス

private ArrayList<ChatMessage> messages = new ArrayList<ChatMessage>(); 
protected Context context; 

public MessageAdapter(final String chatUUID, DatabaseReference databaseReference) { 
    databaseReference.addChildEventListener(new ChildEventListener()...); 
} 

public void addMessage(ChatMessage chatMessage) { 
    messages.add(chatMessage); 

    notifyDataSetChanged(); 
} 

@Override 
public MessageHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    Context context = parent.getContext(); 
    LayoutInflater inflater = LayoutInflater.from(context); 

    MessageHolder viewHolder = null; 
    View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.messages, parent, false); 
    viewHolder = new MessageHolder(layoutView, messages); 

    return viewHolder; 
} 

@Override 
public void onBindViewHolder(MessageHolder holder, int position) { 
    holder.messageImage.setImageResource(R.drawable.user_pacific); 
    holder.messageText.setText(messages.get(position).getMessageText()); 
} 

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

@Override 
public void onAttachedToRecyclerView(RecyclerView recyclerView) { 
    super.onAttachedToRecyclerView(recyclerView); 
} 

答えて

0

問題がfirebaseコードまたはアダプタではありませんでしたが、その代わりLinearLayoutManagerと。私はコードがオフスクリーンで追加されていると思います。私は

LinearLayoutManager manager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);  

LinearLayoutManager manager = new LinearLayoutManager(this); 

を変更することでこれを解決し

関連する問題