可见时刷新片段中的适配器

refresh adapter in fragment when it is visible

我有两个片段..我想在我的第一个片段中的 setUserVisibleHint 方法中刷新我的列表视图适配器 adapter.notifyDataSetChanged():

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if(isVisibleToUser){
        adapter.notifyDataSetChanged();
    }
}

但我得到这个异常:

java.lang.NullPointerException at com.androidbelieve.drawerwithswipetabs.FirstFragment.setUserVisibleHint(FirstFragment.java:247) at android.support.v4.app.FragmentPagerAdapter.setPrimaryItem(FragmentPagerAdapter.java:130) at android.support.v4.view.ViewPager.populate(ViewPager.java:1175)

不好意思我对Fragments有点了解,这是什么"setPrimaryItem"!?

这是我的标签片段:

public class TabFragment extends Fragment {
View x;
public static TabLayout tabLayout;
public static ViewPager viewPager;
public static int int_items = 2 ;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        x =  inflater.inflate(R.layout.tab_layout,null);
        tabLayout = (TabLayout) x.findViewById(R.id.tabs);
        viewPager = (ViewPager) x.findViewById(R.id.viewpager);
        viewPager.setOffscreenPageLimit(2);

    viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));
    viewPager.getCurrentItem();
    viewPager.addOnPageChangeListener(new OnPageChangeListener() {


        @Override
        public void onPageSelected(int position) {
        }

        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        }

        @Override
        public void onPageScrollStateChanged(int state) {
        }
    });


    tabLayout.post(new Runnable() {
        @Override
        public void run() {
                tabLayout.setupWithViewPager(viewPager);
               }
    });

    return x;
}

class MyAdapter extends FragmentPagerAdapter{
    public MyAdapter(FragmentManager fm) {
        super(fm);
    }


    @Override
    public Fragment getItem(int position)
    {
      switch (position){
          case 0 : return new FirstFragment();
          case 1 : return new ZZZFavorites();
      }
    return null;
    }

    @Override
    public int getCount() {
        return int_items;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position){
            case 0 :
                return "Online";
            case 1 :
                return "Favorites";
        }
            return null;
      }
    }
}

你的 adapternull。在访问它之前执行null-check

if (isVisibleToUser && adapter != null) {
    adapter.notifyDataSetChanged();
}