我正在将我的应用程序的ListView转换为RecyclerView。在ListView上,实现OnClickListener非常容易,但在RecyclerView中,我们必须在适配器中实现它。当用户点击一个项目时,我想打开一个新的片段。要做到这一点,我必须在适配器中调用FragmentManager,但我不能这样做。这是我的RecyclerAdapter代码:
public ListItemViewHolder(View itemView) {
super(itemView);
title = (TextView) itemView.findViewById(R.id.title);
description = (TextView) itemView.findViewById(R.id.description);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
//Call FragmentManager and add Fragment to it.
}
}
那么,如何调用FragmentManager并在其中添加片段。有没有比这更好的方法,比如sendingBroadcast或其他方法。
发布于 2015-06-16 20:21:54
您只需要在构造函数中传递一个活动上下文。确保从活动调用new Adapter(this,...)
,从片段调用new Adapter(getActivity(),...)
。
private Context context;
@Override
public void onClick(View v) {
FragmentManager manager = ((AppCompatActivity)context).getSupportFragmentManager();
}
发布于 2015-06-16 20:31:03
最好的选择可能是拥有实例化RecyclerAdapter的片段来实现和接口,如下所示:
public class MyRecyclerAdapter extends Adapter<RecyclerAdapter.ViewHolder> {
private ItemType[] mItems;
private MRAItemClickedListener mListener;
public MyRecyclerAdapter(Context ctx, MRAItemClickedListener listener){
mListener = listener;
...
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.itemView.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
mListener.onItemClicked(mItems[position]);
}
});
}
interface MRAItemClickedListener {
void onItemClicked(ItemType item);
}
}
public class MyFragment ... implements MRAItemClickedListener {
public void onItemClicked(ItemType item){
// do stuff with item
}
}
发布于 2017-06-04 23:10:07
您只需要在构造函数中传递一个活动上下文。一定要从活动中调用新的Adapter(this,...)
,从片段中调用new Adapter(getActivity(),...)
。
private Context context; @Override public void onClick(View v) { FragmentManager manager = ((Activity) context).getFragmentManager();}
https://stackoverflow.com/questions/30866925
复制相似问题