У меня есть пейджер View. Пользователь может выбрать, сколько разных страниц он может иметь.
Все страницы имеют одинаковый макет, но он просто загружает разные данные.
Вот мой фрагментный адаптер:
public class FragmentAdapter extends FragmentPagerAdapter
{
private final List<Fragment> lstFragment = new ArrayList<>();
private final List<String> lstTitles = new ArrayList<>();
public FragmentAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
return lstFragment.get(i);
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return lstTitles.get(position);
}
@Override
public int getCount() {
return lstTitles.size();
}
public void AddFragment (Fragment fragment , String title)
{
lstFragment.add(fragment);
lstTitles.add(title);
}
}
А вот код для многократного вызова фрагмента:
FragAdapter = new FragmentAdapter(getSupportFragmentManager());
viewPager = (ViewPager) findViewById(R.id.main_tabs_pager);
toolbar = (Toolbar) findViewById(R.id.main_page_toolbar);
tabLayout = (TabLayout) findViewById(R.id.main_tabs);
String[] Fragments = {"Frag1", "Frag2", "Frag3", "Frag4"};
for (int i=0; i<Fragments.length; i++)
{
((FragmentAdapter) FragAdapter).AddFragment(new MenuFragment(),Fragments[i]);
}
viewPager.setAdapter(FragAdapter);
tabLayout = (TabLayout) findViewById(R.id.main_tabs);
tabLayout.setupWithViewPager(viewPager);
Так что работает нормально. Но единственная проблема в том, что я не знаю, как узнать разницу в коде между разными фрагментами.
Пример:
Frag1 должен загрузить 5 картинок о море
Frag2 должен загрузить 8 картинок о солнце
Как мне сказать фрагменту, что делать? Я попытался передать конструктору аргументы на примере
public MenuFragment(int numberofpictures, String picturesthemes)
{
// Required empty public constructor
}
но конструкторы должны быть пустыми, потому что он не вызывается снова, когда фрагмент уничтожается и воссоздается ...
у кого-нибудь есть идея? спасибо
ОБНОВЛЕНИЕ
Я не знаю, хороший ли это путь, но вот как я это сделал:
В основном виде деятельности, которую я создал:
for (int i=0; i<Fragments.length; i++)
{
Bundle parameters = new Bundle();
parameters.putInt("myInt", i);
Fragment menuFragment = new MenuFragment();
menuFragment.setArguments(parameters);
((FragmentAdapter) FragAdapter).AddFragment(menuFragment, Fragments[i]);
}
Которые дают каждому фрагменту int i, который является ссылкой на заголовок.
Тогда я просто написал эту функцию:
public String getName (int i)
{
return Fragments[i];
}
, которые возвращают заголовок, основанный на int, который фрагмент получил благодаря связке
Затем, в MenuFragment () я использовал это:
private void fillinthelist()
{
myInt = getArguments().getInt("myInt");
String test = ((MainActivity) getActivity()).getName(myInt);
ListOfProgrammes.add(new Modele_carte(test));
}
, так что он получает int из пакета и делает его похожим благодаря функции в MainActivity
Это хороший способ сделать это? Вроде работает