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