如何在ViewPager中更新可见片段

时间:2018-08-11 03:14:28

标签: android android-fragments android-viewpager

我有一个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

0 个答案:

没有答案