Android 需要解释如何将数据从适配器发送到片段

Android 需要解释如何将数据从适配器发送到片段,android,fragment,adapter,Android,Fragment,Adapter,我想将数据从适配器发送到已经打开的片段。 在主要活动中,有两个片段已经打开,片段A和片段B。在片段A中,我放置了一个RecyclerView和CardView。单击其中一个卡片视图时,我想将其数据发送到片段B。调用mCallbacks时,我会得到一个NPE if (mCallbacks != null){ mCallbacks.onItemClicked(strStockName);} 在本例中,我使用了一个接口。但我需要更多的解释 以下是我的适配器代码: public class

我想将数据从适配器发送到已经打开的片段。 在主要活动中,有两个片段已经打开,片段A和片段B。在片段A中,我放置了一个RecyclerView和CardView。单击其中一个卡片视图时,我想将其数据发送到片段B。调用mCallbacks时,我会得到一个NPE

if (mCallbacks != null){
     mCallbacks.onItemClicked(strStockName);}
在本例中,我使用了一个接口。但我需要更多的解释

以下是我的适配器代码:

public class adapterStock extends RecyclerView.Adapter<adapterStock.ViewHolder> {
   private String[] stockNameDataSet;
   private Context mContext;

   //==============================================
   //---- interface
   public interface Callbacks{
       public void onItemClicked(String StockName);
   }
   private Callbacks mCallbacks;

   //==============================================


   public adapterStock(Context context, String[] DataSet){
       stockNameDataSet = DataSet;
       mContext = context;
   }

   @NonNull
   @Override
   public adapterStock.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
        LayoutInflater layoutInflater = LayoutInflater.from(viewGroup.getContext());
        View view = layoutInflater.inflate(R.layout.cv_stock, viewGroup, false);
        return new ViewHolder(view);
    }

   @Override
   public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        final String strStockName = stockNameDataSet[position];
        holder.tbxStockName.setText(stockNameDataSet[position]);

        holder.cardView.setOnClickListener(new View.OnClickListener(){

           @Override
           public void onClick(View view) {

               Snackbar.make(view, "Stock "+strStockName, Snackbar.LENGTH_LONG).show();

               if (mCallbacks != null){
                mCallbacks.onItemClicked(strStockName);
               }

          }
       });
    }

   @Override
   public int getItemCount() {
       return stockNameDataSet.length;
   }

   public static class ViewHolder extends RecyclerView.ViewHolder{
       public View view;
       public TextView tbxStockName;
       public CardView cardView;

        public ViewHolder(View v){
           super (v);
           tbxStockName = (TextView) v.findViewById(R.id.cvTbxItemStockName);
           cardView = (CardView) v.findViewById(R.id.cvStock);
    }
   }

   public void setCallbacks(Callbacks callbacks){
       this.mCallbacks = callbacks;
   }
}
欢迎提出建议。谢谢。

创建adapterStock实例后,在片段中包括setCallbacks(此)。

在片段中设置Callbacks(此)

更改此设置

     public adapterStock(Context context, String[] DataSet){
        stockNameDataSet = DataSet;
        mContext = context;
    }
对此

 public adapterStock(Context context, String[] DataSet, Callbacks mCallbacks){
        stockNameDataSet = DataSet;
        mContext = context;
        this.mCallbacks=mCallbacks;
    }
在片段的
adapterStock
实例中,将
mCallbacks
作为
this
传递(即
newadapterstock(上下文、数据集、this)


注意:另外两个答案也是正确的

在您的主要活动中公开这些数据。然后,您可以访问这两个片段中的数据。对不起,您可以告诉我有关该代码的更多信息(如何在代码中实现)?在创建适配器类adapterstock do adapterstock.setCallbacks(此)的对象后。请参阅
 public adapterStock(Context context, String[] DataSet, Callbacks mCallbacks){
        stockNameDataSet = DataSet;
        mContext = context;
        this.mCallbacks=mCallbacks;
    }