这是我的ViewPager
private class ViewPagerAdapter extends FragmentPagerAdapter{
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
void addFragment(Fragment fragment, String title){
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position){
return mFragmentTitleList.get(position);
}
}
在主要活动中,
public void setupViewPager() {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(NowPlayingFragment.newInstance(0), getString(R.string.now_playing));
adapter.addFragment(NowPlayingFragment.newInstance(1), getString(R.string.up_coming));
adapter.addFragment(NowPlayingFragment.newInstance(2), getString(R.string.popular));
mViewPager.setAdapter(adapter);
这是我的片段。
public static NowPlayingFragment newInstance(int titleId){
NowPlayingFragment fragment = new NowPlayingFragment();
Bundle args = new Bundle();
args.putInt("title_flag", titleId);
NowPlayingFragment.titleId = titleId;
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
args = savedInstanceState;
mContext = getContext();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_now_playing, container, false);
mUnbinder = ButterKnife.bind(this, view);
Map<String, String> queryString;
queryString = ApiUtils.getQueryStrings(mContext);
Uri uri;
int titleId1 = 0;
if (args != null) {
titleId1 = args.getInt("title_flag");
}
Log.d("tag", "titleId = " + titleId1);
switch (titleId1){
case 0:
uri = ApiUtils.getNowPlayingUri(mContext, queryString);
break;
case 1:
uri = ApiUtils.getUpcomingUri(mContext, queryString);
break;
case 2:
uri = ApiUtils.getPopularUri(mContext, queryString);
break;
default:
uri = ApiUtils.getNowPlayingUri(mContext, queryString);
break;
}
new loadDiscoverList(getContext()).execute(uri);
return view;
}
我尝试列出三个不同的电影列表(现在播放,即将推出,热门)。 但它只显示现在所有三页的播放列表。
似乎将数据从主活动传递到片段不是工作属性,或存储片段参数问题。但我无法找到导致此问题的原因,也不知道如何解决这个问题。
答案 0 :(得分:1)
问题在于args = savedInstanceState;
它应该是args = getArguments();
- 目前只有你的switch语句中的默认列表才被接受。 SavedInstanceState
用于配置更改,您需要使用静态片段生成器方法添加的Fragment参数。
答案 1 :(得分:0)
您没有为片段制作缓存,例如: private final List mFragmentList = new ArrayList&lt;&gt;(); ViewPager已经为您完成了。 尝试在适配器中的方法getItem()内返回相应的新片段实例。