java - 从 firebase 数据库中成功获取数据但无法在 Recyclerview 中显示
问题描述
消息适配器类
public class MessageAdapter extends RecyclerView.Adapter<MessageAdapter.MessageViewHolder>{
private List<Messages> mMessagesList;
private FirebaseAuth mAuth;
public MessageAdapter (List<Messages>mMessagesList)
{
this.mMessagesList = mMessagesList;
}
@Override
public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
View V = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_chat_custom,parent,false);
mAuth = FirebaseAuth.getInstance();
return new MessageViewHolder(V);
}
public class MessageViewHolder extends RecyclerView.ViewHolder{
public TextView messageText;
public MessageViewHolder(View view)
{
super(view);
messageText = (TextView)view.findViewById(R.id.message_text_layout);
}
}
@SuppressLint("ResourceType")
@Override
public void onBindViewHolder(MessageViewHolder holder, int position) {
String current_user_id = mAuth.getInstance().getCurrentUser().getUid();
Messages messages = mMessagesList.get(position);
String from_user = messages.getFrom();
// if (from_user!=null && from_user.equals(current_user_id)){
// holder.messageText.setBackgroundResource(R.drawable.text_background1);
// holder.messageText.setTextColor(Color.red(R.color.red));
// }else {
// holder.messageText.setBackgroundResource(R.drawable.text_background2);
// holder.messageText.setTextColor(Color.red(R.color.black));
// }
holder.messageText.setText(messages.getMessage());
}
@Override
public int getItemCount() {
return mMessagesList.size();
}
}
聊天.java
private RecyclerView messageList;
private List<Messages> messagesList = new ArrayList<>();
private LinearLayoutManager linearLayoutManager;
private MessageAdapter mAdapter;
String MessageSenderId;
String MessageRecieverId;
final DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
MessageSenderId = mAuth.getCurrentUser().getUid();
MessageRecieverId = getIntent().getStringExtra("Recievers_Id");
messageList = (RecyclerView) findViewById(R.id.message_list);
linearLayoutManager = new LinearLayoutManager(this);
mAdapter = new MessageAdapter(messagesList);
// messageList.setHasFixedSize(true);
messageList.setLayoutManager(linearLayoutManager);
messageList.setAdapter(mAdapter);
private void fetchMessages() {
rootRef.child("Messages").child(MessageSenderId).child(MessageRecieverId).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Messages message = dataSnapshot.getValue(Messages.class);
messagesList.add(message);
mAdapter.notifyDataSetChanged();
Log.d("Tag", dataSnapshot.child("Message").getValue().toString());
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
XML 布局
活动聊天
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:minHeight="?attr/actionBarSize"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#000000"
app:titleTextColor="#ffffff"
>
<TextView
android:textColor="@color/white"
android:id="@+id/name"
android:layout_width="275dp"
android:layout_height="match_parent" />
</android.support.v7.widget.Toolbar>
<android.support.v7.widget.RecyclerView
android:id="@+id/message_list"
android:layout_above="@+id/send_message"
android:layout_below="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
<Button
android:id="@+id/add_image"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true" />
<EditText
android:layout_marginLeft="5dp"
android:id="@+id/input_message"
android:layout_width="240dp"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_toStartOf="@+id/send_message" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Send"
android:id="@+id/send_message"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>
自定义布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/message_single_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="12dp">
<TextView
android:id="@+id/message_text_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:background="@drawable/messages_text_background"
android:padding="10dp"
android:text="Textview"
android:textSize="20dp" />
</RelativeLayout>
之前recyclerview
我使用了一个列表视图,它工作得很好,就像预期的那样......然后由于显而易见的原因,我切换到回收视图,我遇到了这个问题
在 logcat 中,我尝试使用 Log.d 获取数据并且它有效......所以我知道数据正在被获取但无法在其中显示它recyclerview
...... Recyclerview 规则也有轻微变化,因为我上次以前我不确定我使用的方式是否正确……如果正确的话,我坚信布局有问题,但就是想不通……请帮忙……卡在这里好几个星期
解决方案
推荐阅读
- mysql - Sequelize where 一对多关联属性的查询?
- java - Java FXML录音机无法耗尽目标数据线
- python - 准确度良好,但在图像分割中没有骰子损失
- certbot - 让加密证书机器人坏了
- firebase - 匿名身份验证是否足够?
- lua - 为什么将模块加载到局部或全局变量会根据 Lua 中的模块产生不同的结果?
- c# - NetWorkInfo、connectivityManager.ActiveNetworkInfo 和 .IsConnected 已过时
- pywinauto - pywinauto(TypeError:&:'NoneType'和'int'不支持的操作数类型)
- c++11 - C++11 函数对象不能调用一个目标,这是另一个函数对象
- python - 如何使用 Python OpenCV 创建这种桶形/径向失真?