首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从适配器类调用getsupportfragmentmanager()?

如何从适配器类调用getsupportfragmentmanager()?
EN

Stack Overflow用户
提问于 2015-08-12 17:37:06
回答 8查看 56.4K关注 0票数 40

我将ViewPager作为RecyclerView.I中的第一项,希望将FragmentStatePagerAdapter设置为onBindViewHolder()方法中的viewpager。但我不能呼叫getsupportfragmentmanager().Please帮助!!.下面是我的代码:

代码语言:javascript
复制
public class CustomListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private Context context;
    private List<RowItem> rowItemList;
    private final int VIEW_TYPE_CUSTOM = 0;
    private final int VIEW_TYPE_NORMAL = 1;
    NewPagerAdapter mCustomPagerAdapter;

    public CustomListAdapter(Context context, List<RowItem> rowItemList) {
        this.context = context;
        this.rowItemList = rowItemList;
    }

    @Override
    public int getItemViewType(int position) {
        if (position == 0)
            return VIEW_TYPE_CUSTOM;
        else
            return VIEW_TYPE_NORMAL;
    }

    @Override
    public int getItemCount() {
        return rowItemList.size()+1;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        switch (getItemViewType(position)) {
            case VIEW_TYPE_CUSTOM:
                recViewHolder1 viewHolderSecond = (recViewHolder1) holder;
                    mCustomPagerAdapter = new NewPagerAdapter(getSupportFragmentManager());
                    viewHolderSecond.vPager.setAdapter(mCustomPagerAdapter);
                break;
            case VIEW_TYPE_NORMAL:
                recViewHolder2 viewHolderFirst = (recViewHolder2) holder;
                RowItem rowItem = rowItemList.get(position-1);
                viewHolderFirst.vName.setText(rowItem.getName());
                viewHolderFirst.vImage.setImageResource(rowItem.getImageId());
                break;

        }
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        switch (viewType) {
            case VIEW_TYPE_CUSTOM:
                View itemView = LayoutInflater.
                        from(parent.getContext()).
                        inflate(R.layout.pagerlayout, parent, false);
                return new recViewHolder1(itemView);
            case VIEW_TYPE_NORMAL:
                View itemView1 = LayoutInflater.
                        from(parent.getContext()).
                        inflate(R.layout.rowlayout, parent, false);
                return new recViewHolder2(itemView1);
        }
        return null;
    }

    @Override
    public long getItemId(int position) {
        return super.getItemId(position);
    }


    public static class recViewHolder1 extends RecyclerView.ViewHolder {
        protected static ViewPager vPager;


        public recViewHolder1(View v) {
            super(v);
            vPager = (ViewPager) v.findViewById(R.id.vPager);
        }
    }

    public class recViewHolder2 extends RecyclerView.ViewHolder implements View.OnClickListener {
        protected  TextView vName;
        protected  ImageView vImage;

        public recViewHolder2(View v) {
            super(v);
            v.setOnClickListener(this);
            vName = (TextView) v.findViewById(R.id.vName);
            vImage = (ImageView) v.findViewById(R.id.vImage);
        } } }
EN

回答 8

Stack Overflow用户

发布于 2016-03-18 08:07:02

我用mContext解决了这个问题

代码语言:javascript
复制
((FragmentActivity)mContext).getSupportFragmentManager().beginTransaction()
                            .replace(R.id.item_detail_container, fragment)
                            .commit();
票数 85
EN

Stack Overflow用户

发布于 2018-08-12 02:27:01

它的最佳解决方案是将上下文的引用从您的活动(或)片段传递到Adapter。

代码语言:javascript
复制
    public UsersAdapter(ArrayList<User> items , Context context) {
    usersList = items;
    this.context = context;
    }

然后将上下文向上转换为AppCompatActivity,如下所示,并获取getSupportFragmentManager

代码语言:javascript
复制
    ((AppCompatActivity) context).getSupportFragmentManager()

分享以提高。

票数 30
EN

Stack Overflow用户

发布于 2016-06-23 22:24:47

您可以在此处设置transition ;)

代码语言:javascript
复制
public void pushFragment(Fragment newFragment, Context context){

    FragmentTransaction transaction = ((FragmentActivity)context).getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment, newFragment);
    transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    transaction.addToBackStack(null);
    transaction.commit();

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

https://stackoverflow.com/questions/31961403

复制
相关文章

相似问题

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