简体   繁体   English

将数据从 RecyclerView 传递到 Fragment?

[英]Passing data from RecyclerView to Fragment?

I am currently creating an application which consists of a Fragment, an Adapter for a RecyclerView and a RecyclerView which is accessed through the fragment.我目前正在创建一个应用程序,它由一个片段、一个 RecyclerView 的适配器和一个通过片段访问的 RecyclerView 组成。 I need data to be passed from the RecyclerView back to the fragment however am unable to do so as the Fragment isn't identified through the Intent.我需要将数据从 RecyclerView 传递回片段,但是我无法这样做,因为片段没有通过 Intent 识别。 When the user selects an item from the RecyclerView this item should be then passed through to the fragment.当用户从 RecyclerView 中选择一个项目时,这个项目应该被传递给片段。 I have the RecyclerView using onBackPressed() in order to navigate back to the fragment which works fine, however no data seems to pass.我有使用 onBackPressed() 的 RecyclerView 以便导航回工作正常的片段,但是似乎没有数据通过。 Please see below what I currently have:请看下面我目前拥有的:

CustomAdapter.java 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 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();
        }
    });

Fragment.java片段.java

       // Nothing related to Passing data within the Fragment

Its for your 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);
   }

}

and this for your adapter这适用于您的适配器

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);
    }
});

I'm highly recommend migrate to kotlin and use higher-order function, its very simple.我强烈建议迁移到 kotlin 并使用更高阶的 function,它非常简单。

You can use interface, here is how to do it你可以使用界面,这里是如何做到的

create interface to handle click:-创建界面来处理点击: -

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

not extend it in your fragment or activity:-不要在您的片段或活动中扩展它:-

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

}

In recycler view pass this activity to recycler view constructor and inside your custom adapter you can assign this activity to listener interface and call the onCustomItemSelected method from overridden onClick(), which will be in your previous activity or fragment.在回收站视图中,将此活动传递给回收站视图构造函数,在您的自定义适配器内部,您可以将此活动分配给侦听器接口,并从覆盖的 onClick() 调用 onCustomItemSelected 方法,该方法将位于您之前的活动或片段中。

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


       



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

this will pass data to onCustomItemSelected() method in your fragment/activity这会将数据传递给您的片段/活动中的 onCustomItemSelected() 方法

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM