【发布时间】:2018-08-20 10:49:54
【问题描述】:
在一个简单的 tabLayout 视图 viewPager 设置中,我无法正确地将所选选项卡传递到其中的片段。当从左到右选择选项卡时(即选项卡 1 -> 选项卡 x),该选项卡被正确解释,但当它们从右到左选择时,返回 0。
这里是重要的代码:
Activity 包括 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;
}
片段的 onCreateView 中的 log 方法调用将正确返回数字 0->6,因为选项卡从左向右滑动,但是一旦选择了当前选项卡左侧的选项卡,它将返回 0,这将成为新的原点(即一个标签右侧将变为 1)
似乎有碎片进出焦点可能导致这种情况?
【问题讨论】:
-
你作为 bundle
ARG_DAY传递到哪里?您的问题是您没有收到片段 ryt 中的ARG_DAY? -
ARG_DAY 通过 newInstance 函数传入 - 因为片段的 onCreate 中不能有参数。它传递给片段有时比根本没有收到它更成问题
-
那么你的问题是什么?
-
片段结束的那个值只是有时是正确的 - 如果我返回到之前打开的选项卡,数字不正确
-
就在那里,第一种方法在低层代码sn-p中
标签: java android android-fragments android-viewpager android-tablayout