如何在Firebase RecyclerView Adapter类中获取Shared Preferences数据
解决方案
步骤1:为Adapter添加Context参数并初始化SharedPreferences
在Adapter的构造方法中传入Context,通过它获取SharedPreferences实例,取出预先存储的自身用户名。
步骤2:在onBindViewHolder中完成用户名比对
拿到自身用户名后,和数据库返回的model.getUname()做对比,根据结果可以区分消息是自己发送还是他人发送,进而调整UI样式。
修改后的完整Adapter代码如下:
public class Chat_Adapter extends FirebaseRecyclerAdapter<Chat_Model, Chat_Adapter.myViewHolder> { private String currentUsername; // 构造方法新增Context参数 public Chat_Adapter(@NonNull FirebaseRecyclerOptions<Chat_Model> options, Context context) { super(options); // 从SharedPreferences读取自身用户名,替换成你实际的存储名称和key SharedPreferences sharedPref = context.getSharedPreferences("你的SP存储名称", Context.MODE_PRIVATE); currentUsername = sharedPref.getString("存储用户名的key", "默认用户名"); } @Override protected void onBindViewHolder(@NonNull myViewHolder holder, int position, @NonNull Chat_Model model) { holder.date.setText(model.getDate()); holder.uname.setText(model.getUname()); holder.msg.setText(model.getMsg()); // 比对自身用户名与消息发送者用户名 if (currentUsername.equals(model.getUname())) { // 自己发送的消息:调整对齐方式、背景等UI属性 holder.msg.setGravity(Gravity.END); holder.uname.setGravity(Gravity.END); holder.date.setGravity(Gravity.END); holder.msg.setBackgroundResource(R.drawable.bg_self_chat); } else { // 他人发送的消息:设置对应UI样式 holder.msg.setGravity(Gravity.START); holder.uname.setGravity(Gravity.START); holder.date.setGravity(Gravity.START); holder.msg.setBackgroundResource(R.drawable.bg_other_chat); } } @NonNull @Override public myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.chat_item, parent, false); return new myViewHolder(view); } class myViewHolder extends RecyclerView.ViewHolder { TextView uname, date, msg; public myViewHolder(@NonNull View itemView) { super(itemView); uname = itemView.findViewById(R.id.named); date = itemView.findViewById(R.id.date); msg = itemView.findViewById(R.id.message); } } }
注意点
- 替换代码中
"你的SP存储名称"和"存储用户名的key"为你实际使用的SharedPreferences文件名和存储键。 - 示例中的
bg_self_chat和bg_other_chat是自定义的消息背景drawable,可根据需求替换成你项目中的资源,或调整其他UI属性。
内容的提问来源于stack exchange,提问作者Gr8 BEAST
相关产品推荐
相关产品推荐

