Search code examples
androidandroid-fragmentsandroid-activityandroid-adapterfragmentstatepageradapter

getResources from FragmentStatePagerAdapter


Inside an activity class, I have this class (from android samples):

    public static class DemoCollectionPagerAdapter extends FragmentStatePagerAdapter {

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

    @Override
    public Fragment getItem(int i) {
        Fragment fragment = new QuestionFragment();
        Bundle args = new Bundle();
        args.putInt(QuestionFragment.ARG_OBJECT, i ); 
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public int getCount() {
        return questionList.length;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return "Title n°" + (position + 1);
    }

}

I would like to change this: return "Title n°" + (position + 1); to: return getActivity().getResources().getString(R.string.questionTabTitle) + (position + 1);

But the activity is undefined. How could I get the string resource that I need?


Solution

  • You can modify the constructor of this class and pass the context of your parent activity as a parameter:

    private Context _context; 
    
    //Constructor of the class
    public DemoCollectionPagerAdapter(FragmentManager fm, Context c) {
        super(fm);
        _context = c;
    }
    

    Then in your getPageTitle function you can access the resources using the new context defined in the class:

    _context.getResources().getString(R.string.questionTabTitle) + (position + 1);