I have a problem with my RecyclerViewAdapter. I want to show my fragments with TabLayout,CardView and ViewPager entegrations. I'm not using Activity, using Fragment. I have a Fragment. And this fragment contains Cardview. And this Cardview contains Tablayout and Viewpager.
How can I use getSupportFragmentManager() in this adapter or how can I edit this adapter? Here is my code:
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);
}
}
}
This is what I think you intended to do: ReyclerView -> Fragment -> Activity with TabLayout and ViewPager. This is how you accomplish that: first, the method where you set up your ViewPager
and TabLayout
("setupViewPager") should be in an Activity
which has the getFragmentManger()
or getSupportFragmentManager()
if you're using an AppCompatActivity
. Your adapter class can be in another file, though.
Secondly, it also appears you're trying to put your TabLayout
and ViewPager
in your ViewHolder
. ViewHolders are used in RecyclerView
lists, not for lateral navigation. Take this code out of the class:
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);
Finally, here is how it should look in your MainActivity under onCreate
:
// Get the ViewPager and set it's PagerAdapter so that it can display items
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager()));
// Give the TabLayout the ViewPager
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
Here is an additional link reference.