不能在RecyclerAdapter中使用getSupportFragmentManager()

时间:2017-06-01 18:20:39

标签: android android-fragments android-viewpager

我的RecyclerViewAdapter出了问题。我想用TabLayout,CardView和ViewPager集成来显示我的片段。我没有使用Activity,使用Fragment。我有一个片段。这个片段包含Cardview。此Cardview包含Tablayout和Viewpager。

如何在此适配器中使用getSupportFragmentManager()或如何编辑此适配器?这是我的代码:

RecyclerViewAdapter.java

public class RecyclerViewAdapter extends 
RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {

    public ArrayList<String> myValues;
    public RecyclerViewAdapter (ArrayList<String> myValues){
        this.myValues= myValues;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View listItem = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_select_area, parent, false);
        return new MyViewHolder(listItem);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {

    }

    @Override
    public int getItemCount() {
        return myValues.size();
    } 

    public class MyViewHolder extends RecyclerView.ViewHolder {
            private TextViewPoppins myTextView;
            private TabItem tab_loc,tab_area;
            private ViewPager viewPager;
            private TabLayout tabLayout;

            public MyViewHolder(View itemView)
            {
                super(itemView);
                myTextView = (TextViewPoppins)itemView.findViewById(R.id.select_area);
                tabLayout = (TabLayout) itemView.findViewById(R.id.tabs);
                tab_loc= (TabItem) itemView.findViewById(R.id.tab_loc);
                tab_area= (TabItem) itemView.findViewById(R.id.tab_area);
                tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.ic_location_green));
                tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.ic_kort));
                viewPager = (ViewPager) itemView.findViewById(R.id.viewpager);
                setupViewPager(viewPager);


            }
        }

    private void setupViewPager(ViewPager viewPager)
    {

        ViewPagerAdapter adapter = new 
        ViewPagerAdapter(getSupportFragmentManager()); 
        //this line gives the error.
        adapter.addFragment(new LocationFragment(), "ONE");
        adapter.addFragment(new AreaFragment(), "TWO");
        viewPager.setAdapter(adapter);


    }

    class ViewPagerAdapter extends FragmentPagerAdapter
    {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager)
        {
            super(manager);
        }

        @Override
        public Fragment getItem(int position)
        {
            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

        public void addFragment(Fragment fragment, String title)
        {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }
}

3 个答案:

答案 0 :(得分:1)

这是我认为你打算做的:ReyclerView - &gt;片段 - &gt; TabLayout和ViewPager的活动。这就是您实现这一目标的方法:首先,您设置ViewPagerTabLayout(&#34; setupViewPager&#34;)的方法应该在Activity中,其中{ {1}}或getFragmentManger()如果您正在使用getSupportFragmentManager()。但是,您的适配器类可以位于另一个文件中。

其次,您似乎也试图将AppCompatActivityTabLayout放入ViewPager。 ViewHolders用于ViewHolder列表,不用于横向导航。把这段代码从课堂上拿出来:

RecyclerView

最后,以下是tabLayout = (TabLayout) itemView.findViewById(R.id.tabs); tab_loc= (TabItem) itemView.findViewById(R.id.tab_loc); tab_area= (TabItem) itemView.findViewById(R.id.tab_area); tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.ic_location_green)); tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.ic_kort)); viewPager = (ViewPager) itemView.findViewById(R.id.viewpager); setupViewPager(viewPager); 下的MainActivity中的内容:

onCreate

Here是一个额外的链接参考。

答案 1 :(得分:0)

在MainActivity.java中移动ViewPagerAdapter类,并在MainActivity.java中的onCreate()方法中设置ViewPager。 getSupportFragmentManager()仅在您的类扩展Activity时才有效。 看看这个: Cannot call getSupportFragmentManager() from activity

答案 2 :(得分:0)

setupViewPager(viewPager);内尝试onBindViewHolder,我认为这应该可以解决您的问题。

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
setupViewPager(holder.viewPager);
}