我有一个ViewPager,它的十二个片段UpcomingGamesFragment
代表一年,因此十二个片段,每个月都有十二个片段。
现在,当用户选择一个新平台(PS4,Nintendo开关等)来过滤片段数据时,我希望更新ViewPager中所有可见的片段,并且当他关闭导航抽屉(抽屉包含许多平台(控制台)可供选择。
我的工作如下:我的自定义ViewPager适配器中有一个update allFragments方法,该方法应该能够更新所有片段,但是问题出在{{1} }。这是一个UpcomingGamesFragment方法。在其中,我首先检查loadReleaseData(int refresh)
是否不为空,如果它为null,则意味着该片段为null(组件为null以及其他所有内容),现在问题是getActivity()
始终为null,并且在方法中没有第一个if语句的情况下,应用程序崩溃,并显示NullPointerException。
这是我的ViewPager适配器:
getActivity()
请注意public class SectionsPagerAdapter extends FragmentStatePagerAdapter {
private ArrayList<Fragment> mFragments = new ArrayList<>();
private ArrayList<String> mFragmentsTitle = new ArrayList<>();
private ArrayList<String> mFragmentsFilter = new ArrayList<>();
private Fragment mCurrentFragment;
public void addFragment(Fragment fragment, String title) {
mFragments.add(fragment);
mFragmentsTitle.add(title);
}
/**
* Used for adding UpcomingGamesFragments
* @param fragment UpcomingGamesFragment
* @param title UpcomingGamesFragment monthly title [MMMM YYYY]
* @param filter UpcomingGamesFragment monthly filter to pass into the query
*/
public void addFragment(Fragment fragment, String title, String filter) {
mFragments.add(fragment);
mFragmentsTitle.add(title);
mFragmentsFilter.add(filter);
}
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
// This page adapter (SectionPagerAdapter) class is used by MainActivity and GamePageActivity
// If isn't empty pass the query code m_y [we're in MainActivity]
if (!mFragmentsFilter.isEmpty()) {
Fragment upcomingFragment = new UpcomingGamesFragment();
Bundle bundle = new Bundle();
bundle.putString("fragment_filter", mFragmentsFilter.get(position));
upcomingFragment.setArguments(bundle);
return upcomingFragment;
}
return mFragments.get(position);
}
public void updateUpcomingGamesFragments() {
// Really only updates the visible ones
for (int i = 0; i < mFragments.size(); i++) {
UpcomingGamesFragment upcomingGamesFragment = (UpcomingGamesFragment) mFragments.get(i);
upcomingGamesFragment.setFilter(mFragmentsFilter.get(i));
upcomingGamesFragment.loadReleaseData(1);
}
}
@Override
public int getCount() {
return mFragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentsTitle.get(position);
}
public UpcomingGamesFragment getUpcomingFragment(int position) {
return (UpcomingGamesFragment) mFragments.get(position);
}
public Fragment getCurrentFragment() {
return mCurrentFragment;
}
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
if (getCurrentFragment() != object) {
// To know we're in Upcoming ViewPager
// if (!mFragmentsFilter.isEmpty()) {
mCurrentFragment = (Fragment) object;
// }
}
super.setPrimaryItem(container, position, object);
}
}
方法。当用户关闭抽屉时,将调用该方法。 updateUpcomingGamesFragments()
用于我的SectionsPagerAdapter
片段中,因此UpcomingViewPagerFragment
包含了我的ViewPager,后者包含了所有12个UpcomingViewPagerFragment
片段。
这是我的loadReleasesData方法,它位于UpcomingGamesFragment
UpcomingGamesFragment