首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Recycler.Adapter上调用getFragmentManager?

如何在Recycler.Adapter上调用getFragmentManager?
EN

Stack Overflow用户
提问于 2015-06-16 19:58:29
回答 6查看 51.8K关注 0票数 40

我正在将我的应用程序的ListView转换为RecyclerView。在ListView上,实现OnClickListener非常容易,但在RecyclerView中,我们必须在适配器中实现它。当用户点击一个项目时,我想打开一个新的片段。要做到这一点,我必须在适配器中调用FragmentManager,但我不能这样做。这是我的RecyclerAdapter代码:

代码语言:javascript
复制
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或其他方法。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-06-16 20:21:54

您只需要在构造函数中传递一个活动上下文。确保从活动调用new Adapter(this,...),从片段调用new Adapter(getActivity(),...)

代码语言:javascript
复制
private Context context;

@Override
public void onClick(View v) {
    FragmentManager manager = ((AppCompatActivity)context).getSupportFragmentManager();
}
票数 77
EN

Stack Overflow用户

发布于 2015-06-16 20:31:03

最好的选择可能是拥有实例化RecyclerAdapter的片段来实现和接口,如下所示:

代码语言:javascript
复制
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
    }

}
票数 6
EN

Stack Overflow用户

发布于 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();}

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30866925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档