0

I try to populate tab titles in FragmentPagerAdapter by strings from string.xml. I check a few different ways to do that based on StackOverlow or another sources. Below I present my newest version of code. I still have message that "Cannot Resolve method 'getResources()'. Is it a possibility to correlate tab names with string.xml?

import android.content.Context;

import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;

public class SimpleFragmentPagerAdapter extends FragmentPagerAdapter {

final int PAGE_COUNT=5;
private int[] tabTitles = new int[] {R.string.head_character, R.string.head_training, R.string.head_evolutions, R.string.head_talismans, R.string.head_enchantments};

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

@Override
public Fragment getItem(int position) {
    if (position == 0) {
        return new TrainingFragment();
    } else {
        return new EvoFragment();
    }
}

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

@Override
public CharSequence getPageTitle(int position) {
    // Generate title based on item position
    return getResources().getString(tabTitles[position]);
}
}
Ashish
  • 6,791
  • 3
  • 26
  • 48
Tomiszen
  • 11
  • 2

3 Answers3

1

try to set context as a parameter in your Class contractor and use it in your getPageTitle() methode ;

public class SimpleFragmentPagerAdapter extends FragmentPagerAdapter {
    private Context context;
    final int PAGE_COUNT=5;
    private int[] tabTitles = new int[] {R.string.head_character, R.string.head_training, R.string.head_evolutions, R.string.head_talismans, R.string.head_enchantments};

     public SimpleFragmentPagerAdapter(FragmentManager fm , Context context) {
            super(fm);
            this.context = context;
        }

    @Override
    public Fragment getItem(int position) {
        if (position == 0) {
            return new TrainingFragment();
        } else {
            return new EvoFragment();
        }
    }

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

    @Override
    public CharSequence getPageTitle(int position) {
        // Generate title based on item position
        return context.getResources().getString(tabTitles[position]);
    }
}
Ashish
  • 6,791
  • 3
  • 26
  • 48
mohammadReza Abiri
  • 1,759
  • 1
  • 9
  • 20
  • 1
    It's almost working. I had to change one more line of code, adding context argument From: SimpleFragmentPagerAdapter adapter = new SimpleFragmentPagerAdapter(getSupportFragmentManager()); To: SimpleFragmentPagerAdapter adapter = new SimpleFragmentPagerAdapter(getSupportFragmentManager(), getApplicationContext()); Thanks for help – Tomiszen Nov 16 '19 at 12:33
0

call the getResources() method using getActivity().getApplicationContext() as return getActivity().getApplicationContext().getResources().getString(tabTitles[position]);

OMi Shah
  • 5,768
  • 3
  • 25
  • 34
0

you only can call getResorces() method on a context so you should use getActivity().getResorces()....