user9132502
user9132502

Reputation:

How can I add a PreferenceFragment in a ViewPager?

All my fragments are android.support.v4.app.Fragment and the Viewpager extends FragmentStatePagerAdapter which also uses android.support.v4.app.Fragment.

I have a Fragment class which extends PreferenceFragment that I want to add in my Viewpager with my other two fragments.

How can I accomplish this?

Here's my ViewPager

public class SectionsPagerAdapter extends FragmentStatePagerAdapter {

private ArrayList<Fragment> mFragments = new ArrayList<>();
private ArrayList<String> mFragmentsTitle = new ArrayList<>();

public void addFragment(Fragment fragment, String title){
    mFragments.add(fragment);
    mFragmentsTitle.add(title);
}

public SectionsPagerAdapter(FragmentManager fm) {
    super(fm);
}

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

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

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


}

Here's what I have in my PreferenceFragment

public class GameNotesFragment extends PreferenceFragment {


public GameNotesFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_game_notes, container, false);
    return view;
}

}

When I try to add it in:

mSectionsPagerAdapter.addFragment(new GameNotesFragment(), "Note");

It gives me

Wrong firt argument com.example.fragments.GameNotesFragment', required: 'android.support.v4.app.Fragment' 

Upvotes: 1

Views: 460

Answers (2)

Aslami.dev
Aslami.dev

Reputation: 1060

public class SectionsPagerAdapter extends FragmentStatePagerAdapter {

    private ArrayList<Fragment> mFragments = new ArrayList<>();
    private ArrayList<String> mFragmentsTitle = new ArrayList<>();

    public void addFragment(Fragment fragment, String title){
        mFragments.add(fragment);
        mFragmentsTitle.add(title);
    }

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public android.support.v4.app.Fragment getItem(int position) {
        android.support.v4.app.Fragment f = null;
        if (position == 0) {
            f = new GameNotesFragment();
        }

        if (position == 1) {
            f = new GameNotesFragment(); //replace your fragment 2
        }

        if (position == 2) {
            f = new GameNotesFragment();//replace your fragment 3
        }

        return f;
    }

    @Override
    public int getCount() {
        return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {

        switch (position) {
            case 0:
                return getResources().getString(R.string.name1);
            case 1:
                return getResources().getString(R.string.name2);
            case 2:
                return getResources().getString(R.string.name3);
        return null;
    }
}

and in activity:

SectionsPagerAdapter mSectionsPagerAdapter = new SectionsPagerAdapter(MainActivity.this.getSupportFragmentManager());
tabLayout = v1.findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager));

Upvotes: 1

Gergely Kőr&#246;ssy
Gergely Kőr&#246;ssy

Reputation: 6393

PreferenceFragment extends the platform variant of the Fragment class. What you need is a PreferenceFragmentCompat that extends the support lib variant of Fragment (mind the different packages).

The support preferences require additional package(s) in your gradle file:

implementation 'com.android.support:preference-v7:27.1.0'
implementation 'com.android.support:preference-v14:27.1.0'

Also, while you're at it, make sure to check out the bug fix lib I created for the support preferences' common (and pretty annoying) bugs.

Upvotes: 1

Related Questions