You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 05:01:24