Reputation: 121
i want to build the next UI:
TabLayout with 2 tabs and 2 different Fragments (Solved and Unsolved)
My onCreateView in Fragment is never called.
Here I inflate my viewPager:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
setupViewPager(viewPager);
mAdapter = new ViewPagerAdapter(getSupportFragmentManager());
mAdapter.addFragment(new UnsolvedTasksFragment());
mAdapter.addFragment(new SolvedTasksFragment());
viewPager.setAdapter(mAdapter);
mTabLayout = (TabLayout) findViewById(R.id.tabs);
mTabLayout.setupWithViewPager(viewPager);
mTabLayout.getTabAt(0).setText(getString(R.string.tablayout_unsolved));
mTabLayout.getTabAt(1).setText(getString(R.string.tablayout_solved));
}
My custom ViewPagerAdapter:
public class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
if (!mFragmentList.isEmpty() && mFragmentList.size() > id)
return mFragmentList.get(position);
return new Fragment();
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment) {
mFragmentList.add(fragment);
}
@Override
public CharSequence getPageTitle(int position) {
return null;
}
}
Here an example of my Fragment:
public class SolvedTasksFragment extends Fragment implements RecyclerViewClickListenerSolved {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//Some code here;
return rootView;
}
@Override
public void itemClick(View v, int position) {
}
}
Maybe somebody can tell what is wrong.
I don't need the whole solution.
Upvotes: 0
Views: 311
Reputation: 37414
The value of id
is 16842960
so
if (true && 2 > 16842960) // will not be executed
// true && false => false
Solution : you can check the size against position
or remove this check if not specific to the implementation
@Override
public Fragment getItem(int position) {
if (mFragmentList.size() > position)
return mFragmentList.get(position);
return new Fragment();
}
Upvotes: 1
Reputation: 1957
First set the adapter and then add the fragments. Do it like this. Change these statements
mAdapter = new ViewPagerAdapter(getSupportFragmentManager());
mAdapter.addFragment(new UnsolvedTasksFragment());
mAdapter.addFragment(new SolvedTasksFragment());
viewPager.setAdapter(mAdapter);
to these
mAdapter = new ViewPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(mAdapter);
mAdapter.addFragment(new UnsolvedTasksFragment());
mAdapter.addFragment(new SolvedTasksFragment());
Upvotes: 1