ManOfWar
ManOfWar

Reputation: 121

onCreateView() is never called in Fragment

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

Answers (2)

Pavneet_Singh
Pavneet_Singh

Reputation: 37414

From docs

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

Vicky
Vicky

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

Related Questions