Фрагмент, показывающий неправильные аргументы - PullRequest
0 голосов
/ 07 октября 2018

У меня есть активность, которая использует viewpager и фрагменты с вкладками.Я передаю данные из действия во фрагменты, но они всегда показывают неправильные данные для определенных вкладок.У меня есть один фрагмент, который должен запрашивать данные в зависимости от аргументов, передаваемых через пакет.

private Fragment createFragment(String title){
    HomeFragment fragment = new HomeFragment();
    Bundle bundle = new Bundle();
    bundle.putString("category",title);
    fragment.setArguments(bundle);
    return fragment;

}

Затем я передаю эту функцию на просмотрщик так:

ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(createFragment("Item 1"),"Tab 1");
    adapter.addFragment(createFragment("Item 2"),"Tab 2");
    adapter.addFragment(createFragment("Item 3"),"Tab 3");
    adapter.addFragment(createFragment("Item 4"),"Tab 4");
    adapter.addFragment(createFragment("Item 5"),"Tab 5");

Наконец яполучить аргумент следующим образом:

String argument = this.getArguments().getString("category");

проблема в том, что когда я на вкладке 1, он возвращает элемент 2. Но когда я посещаю все вкладки, он начинает возвращать правильный элемент, т.е. элемент 1, когдана вкладке 1.

Где проблема?

РЕДАКТИРОВАТЬ:

ViewPagerAdapter:

public class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> fragList = new ArrayList<>();
private final List<String> titleList = new ArrayList<>();

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

@Override
public Fragment getItem(int position) {
  return  fragList.get(position);;
}
public void addFragment(Fragment fragment, String title) {
    fragList.add(fragment);
    titleList.add(title);
}

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

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

}

1 Ответ

0 голосов
/ 07 октября 2018

Может быть, вы могли бы создать класс адаптера и убедиться, что вы передаете правильный фрагмент в правильном положении.Возможно, проблема в том, что адаптер добавляет фрагменты в неправильную позицию, как вы их создаете.

class ViewPagerAdapter extends FragmentPagerAdapter {
        public ViewPagerAdapter(FragmentManager fm) {
            super(fm);
        }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
           case 1: return createFragment("Item 1"),"Tab 1");
           case 2: return createFragment("Item 2"),"Tab 2");
           case 3: return createFragment("Item 3"),"Tab 3");
           case 4: return createFragment("Item 4"),"Tab 4");
           case 5: return createFragment("Item 5"),"Tab 5");
        }
    }

    @Override
    public int getCount() {
        return NUM_PAGES;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...