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

时间:2017-04-12 15:08:33

标签: android android-fragments android-viewpager fragment android-tablayout

我有两个片段..我想在我的第一个片段中的setUserVisibleHint方法中刷新我的listview适配器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)   在android.support.v4.app.FragmentPagerAdapter.setPrimaryItem(FragmentPagerAdapter.java:130)   在android.support.v4.view.ViewPager.populate(ViewPager.java:1175)

对不起,我对片段知之甚少,这是什么“setPrimaryItem”!?

这是我的Tab片段:

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;
      }
    }
}

1 个答案:

答案 0 :(得分:1)

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

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