微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将数据从 RecyclerView 传递到 Fragment?

如何解决将数据从 RecyclerView 传递到 Fragment?

我目前正在创建一个应用程序,它由一个 Fragment、一个 RecyclerView 的适配器和一个通过 Fragment 访问的 RecyclerView 组成。我需要将数据从 RecyclerView 传递回片段,但是我无法这样做,因为片段未通过 Intent 识别。当用户从 RecyclerView 中选择一个项目时,这个项目应该被传递给片段。我有使用 onBackpressed() 的 RecyclerView 以便导航回工作正常的片段,但是似乎没有数据通过。请在下面查看我目前拥有的:

CustomAdapter.java

    private OnItemClickListener mOnItemClickListener;

    public interface OnItemClickListener{
          public void onItemClick(View view,int position);
    }

    @Override
    public void onBindViewHolder(@NonNull final MyViewHolder holder,int position) {
         holder.text1.setText(String.valueOf(text1.get(position)));
         holder.text2.setText(String.valueOf(text2.get(position)));
         holder.text3.setText(String.valueOf(text3.get(position)));

    holder.itemView.setonClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mOnItemClickListener.onItemClick(v,holder.getAdapterPosition());
        }
    });
}

InputToFragment.java

        @Override
        public void onItemClick(View view,int position) {
            // Need to pass data through to Fragment,however unable to do so as it's not identified
            // within the Intent
            onBackpressed();
        }
    });

片段.java

       // nothing related to Passing data within the Fragment

解决方法

适合你的片段

YourFragment : Fragment() {
    OnItemClickListener listener = new OnItemClickListener(){
        @Override
         public void onItemClick(View view,int position){
             //this called if item at adapter clicked
         }
    }

  ....
   //whatever lifecycle you choose for initialize adapter
   onCreateView(){
       adapter = new YourAdapter(listener);
   }

   public interface OnItemClickListener{
          public void onItemClick(View view,int position);
   }

}

这适用于您的适配器

private OnItemClickListener listener; 

YourConstructorAdapter(OnItemClickListener listener){
   this.listener = listener;
}

 @Override
public void onBindViewHolder(@NonNull final MyViewHolder holder,int position) {
     holder.text1.setText(String.valueOf(text1.get(position)));
     holder.text2.setText(String.valueOf(text2.get(position)));
     holder.text3.setText(String.valueOf(text3.get(position)));

holder.itemView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // this code calling method from fragment
        listener.onItemClick(v,position);
    }
});

我强烈建议迁移到 kotlin 并使用高阶函数,它非常简单。

,

你可以使用界面,这是怎么做的

创建处理点击的接口:-

public interface OnCustomItemSelectListener {
    void onCustomItemSelected(String data);
}

不要在您的片段或活动中扩展它:-

public class MyActivity implements OnCustomItemSelectListener {
    @Override
    public void onCustomItemSelected(String data) {
        /*store it if neede */
        /* additional code */
    }

}

在回收者视图中,将此活动传递给回收者视图构造函数,在您的自定义适配器中,您可以将此活动分配给侦听器接口,并从覆盖的 onClick() 调用 onCustomItemSelected 方法,该方法将在您之前的活动或片段中。

OnCustomItemSelectListener itemSelectListener;
public CustomAdapter(Activity listenerAct,.....){
  this.itemSelectListener = listenerAct;
}


       



@Override
 public void onClick(View view)  
 {  
    itemSelectListener.onCustomItemSelected(data);  
 }  

这会将数据传递给片段/活动中的 onCustomItemSelected() 方法

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。