关于#android#的问题:Recycle适配器代码如下:想用点击事件中的refresh刷新fragment里的数据,点击按钮就退出

本人刚接触android开发,处于看书敲代码还不懂含义的阶段。

Recycle适配器代码如下:想用点击事件中的refresh刷新fragment里的数据,点击按钮就退出。

    public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
        UserModel user = mUserList.get(position);
        //本地文件
        File documentDir = Environment.getExternalStorageDirectory();
        String imgDir = documentDir.getAbsolutePath() + "/" + Const.PACKAGE_NAME + "/" + "dbfiles";

        File file = new File(imgDir, user.getImage());
        //加载图片
        Glide.with(mContext).load(file).into(holder.userphoto);

        holder.detailBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                // 点击事件
                UserModel um = mUserList.get(position);
                //Toast.makeText(mContext, um.getUsername() + "", Toast.LENGTH_SHORT).show();

                    UserDetailFragment.refresh(user.getPersonname());//想用refresh方法把数据传递到fragment
               }
            });
        
        holder.username.setText("姓名:"+user.getPersonname());
        holder.sex.setText("性别:"+user.getSex());
        holder.nation.setText("民族:"+user.getNation());
        holder.age.setText("年龄:"+user.getAge()+"岁");

fragment代码如下:


public class UserDetailFragment extends Fragment {

    private static View view;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.item_userdetail2, container, false);
        TextView personname = view.findViewById(R.id.personname);
        personname.setText("你好好");
        return view;
    }
    
    public static void refresh(String Personname) {
        TextView personname = view.findViewById(R.id.personname);
        personname.setText(Personname);
    }
}

调试一下,看看
view.findViewById(R.id.personname);
返回的文本框是否为空

TextView personname = view.findViewById(R.id.personname); 这句话中的view 你从哪里来,你在Fragment中定义了静态常量view,但是没有初始化。我们在写这种类型的事件的时候,一般不写静态方法,而是写接口回调。
大致写法

 private  ItemClick  listener;
    public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
holder.detailBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                // 点击事件
                UserModel um = mUserList.get(position);
               if(listener!=null){
itemClick.onClick(user.getPersonname())
}
 
        
               }
            });

}

 interface ItemClick {
        void onClick(String s);
    }
 public void setItemClick (ItemClick listener ){
this.listener=listener}

然后再初始化adapter之后会,调用adapter.setItemClick(new .....)