这是我ViewPager使用不同的数据的一个片段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;
}
我试着列出三个不同的电影列表(现在播放,即将到来,流行)。 但它只显示所有三个页面上正在播放列表。
这似乎是从主要活动传递数据到片段不工作的属性,或存储片段参数问题。但是我无法找到导致此问题的原因,也不知道如何解决此问题。
尝试使用viewpager的addOnPageChangeListener在片段更改时加载数据 – AbhayBohra
@MarkKeen将saveInstanceState更改为getArguments()。现在它显示现在播放和流行,但不显示即将到来。我的意思是它显示了应用程序启动时的情况,但是当swipt时,它会覆盖流行列表。 – HyperTiger