Выбранная вкладка не передается во фрагмент в tablayout

В простой настройке viewPager представления tabLayout я не могу правильно пройти через выбранную вкладку к фрагменту внутри нее. Поскольку вкладки выбираются слева направо (то есть вкладка 1 -> вкладка x), вкладка интерпретируется правильно, но, поскольку они выбираются справа налево, возвращается 0.

Вот важный код:

Активность, включая tabLayout:

TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);

    ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
    viewPager.setAdapter(new OwnPagerAdapter(getSupportFragmentManager(), NavDrawer.this));

    tabLayout.setupWithViewPager(viewPager);

PagerAdapter:

public class OwnPagerAdapter extends FragmentPagerAdapter {
private int TAB_COUNT = 7;
private String tabTitles[] = new String[] {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" };
private Context context;

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

}

@Override
public Fragment getItem(int position) {
    return OwnTimetableFragment.newInstance(position - 1);
}

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

@Override
public CharSequence getPageTitle(int position) {
    return tabTitles[position];
}
}

Фрагмент:

public class OwnTimetableFragment extends Fragment {

public static final String ARG_DAY = "ARG_DAY";

private int mDay;

public static OwnTimetableFragment newInstance(int day) {
    Bundle args = new Bundle();
    args.putInt(ARG_DAY, day);
    OwnTimetableFragment fragment = new OwnTimetableFragment();
    fragment.setArguments(args);
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mDay = getArguments().getInt(ARG_DAY);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View tabView = inflater.inflate(R.layout.fragment_own_timetable, container, false);
Log.e("mDay", mDay + "");
    return tabView;
}

Вызов метода log в onCreateView фрагмента будет правильно возвращать числа 0->6, когда вкладки пролистываются слева направо, но как только будет выбрана вкладка слева от текущей вкладки, она вернет 0, что станет новое происхождение (то есть одна вкладка справа станет 1)

Кажется, что-то происходит с фрагментами, входящими и не сфокусированными, что может быть причиной этого?

1 ответ

Прежде всего, вы передаете pos - 1 в вашем новом экземпляре, из-за чего ваша первая вкладка будет отображать лог как -1. Если вы хотите правильное значение, только передайте pos в newInstance. Кроме этого, убедитесь, что вы не передаете setOffscreenPageLimit в viewPager. Все остальное в вашем коде, кажется, хорошо. Дайте мне знать вашу точную проблему, если вы все еще сталкиваетесь с ней.

Другие вопросы по тегам