Java 将适配器设置为RecyclerView内部片段会导致异常

Java 将适配器设置为RecyclerView内部片段会导致异常,java,android,android-fragments,Java,Android,Android Fragments,我有一个片段,里面有一个选项卡布局,它包含三个选项卡(片段)。现在的问题是,当我从tab1打开tab3时,它会导致NullPointerException 以下是第三个选项卡的代码: public class FavoritesFragment extends Fragment { private RecyclerView rView; FavoritesAdapter adapter; @Override public void setMenuVisi

我有一个片段,里面有一个
选项卡布局
,它包含三个选项卡(片段)。现在的问题是,当我从
tab1
打开
tab3
时,它会导致
NullPointerException

以下是第三个选项卡的代码:

    public class FavoritesFragment extends Fragment
{
    private RecyclerView rView;
    FavoritesAdapter adapter;

    @Override
    public void setMenuVisibility(final boolean visible) {
        super.setMenuVisibility(visible);
        if (visible)
        {

            adapter.notifyDataSetChanged();
        }
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        View rootView = inflater.inflate(R.layout.favorite_fragment, container, false);
        Realm realm = Realm.getInstance(getActivity());
        RealmResults<favorite> results1 =
                realm.where(favorite.class).findAll();

        List<favorite> data  = results1;
        rView =(RecyclerView)rootView.findViewById(R.id.favorite_layout);
        GridLayoutManager glm_fav = new GridLayoutManager(getActivity(),3, LinearLayoutManager.VERTICAL,false);
        rView.setLayoutManager(glm_fav);
        adapter = new FavoritesAdapter(data);

        if(data!=null)
            adapter.notifyDataSetChanged();

        rView.setAdapter(adapter);
        return rootView;
    }


}
一旦选项卡可见,它就会尝试更新RecyclerView。现在,为了解决这个问题,我试着改变

public void setMenuVisibility(final boolean visible) {
    super.setMenuVisibility(visible);
    if (visible)
    {
        Realm realm = Realm.getInstance(getActivity());
    RealmResults<favorite> results1 =
            realm.where(favorite.class).findAll();

    List<favorite> data  = results1;
    rView =(RecyclerView)rootView.findViewById(R.id.favorite_layout);
    GridLayoutManager glm_fav = new GridLayoutManager(getActivity(),3, LinearLayoutManager.VERTICAL,false);
    rView.setLayoutManager(glm_fav);
    adapter = new FavoritesAdapter(data);

        adapter.notifyDataSetChanged();
    }
}

所以,在花了一段时间之后!我自己修的。问题是当视图本身为空时调用了
notifyDataSetChanged()
。下面是我如何修复它的:

@Override
public void setMenuVisibility(final boolean visible) {
    super.setMenuVisibility(visible);
    if (visible)
    {
        if(getView()!=null)
            adapter.notifyDataSetChanged();
    }
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    View rootView = inflater.inflate(R.layout.favorite_fragment, container, false);
    Realm realm = Realm.getInstance(getActivity());
    RealmResults<favorite> results1 =
            realm.where(favorite.class).findAll();

    List<favorite> data  = results1;
    rView =(RecyclerView)rootView.findViewById(R.id.favorite_layout);
    GridLayoutManager glm_fav = new GridLayoutManager(getActivity(),3, LinearLayoutManager.VERTICAL,false);
    rView.setLayoutManager(glm_fav);
    adapter = new FavoritesAdapter(data);

    if(data!=null)
        adapter.notifyDataSetChanged();

    rView.setAdapter(adapter);
    return rootView;
}
@覆盖
public void setMenuVisibility(最终布尔值可见){
超级设置可视性(可见);
如果(可见)
{
如果(getView()!=null)
adapter.notifyDataSetChanged();
}
}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态)
{
视图根视图=充气机。充气(R.layout.favorite\u碎片,容器,false);
Realm Realm=Realm.getInstance(getActivity());
RealmResults结果1=
realm.where(favorite.class).findAll();
列表数据=结果1;
rView=(RecyclerView)rootView.findviewbyd(R.id.favorite\u布局);
GridLayoutManager glm_fav=新的GridLayoutManager(getActivity(),3,LinearLayoutManager.VERTICAL,false);
查看设置布局经理(glm_fav);
适配器=新的收藏夹适配器(数据);
如果(数据!=null)
adapter.notifyDataSetChanged();
rView.setAdapter(适配器);
返回rootView;
}
> Here is the logcat also: D/AndroidRuntime: Shutting down VM
> E/AndroidRuntime: FATAL EXCEPTION: main
>                   Process: nanodegree.premiere, PID: 21859
>                   java.lang.NullPointerException: Attempt to invoke virtual method 'void
> nanodegree.premiere.adapter.FavoritesAdapter.notifyDataSetChanged()'
> on a null object reference
>                       at nanodegree.premiere.adapter.FavoritesFragment.setMenuVisibility(FavoritesFragment.java:29)
>                       at android.support.v4.app.FragmentPagerAdapter.setPrimaryItem(FragmentPagerAdapter.java:129)
>                       at android.support.v4.view.ViewPager.populate(ViewPager.java:1104)
>                       at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:552)
>                       at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:514)
>                       at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:495)
>                       at nanodegree.premiere.adapter.ListFragment$1.onTabSelected(ListFragment.java:52)
>                       at android.support.design.widget.TabLayout.selectTab(TabLayout.java:871)
>                       at android.support.design.widget.TabLayout.selectTab(TabLayout.java:841)
>                       at android.support.design.widget.TabLayout$Tab.select(TabLayout.java:1115)
>                       at android.support.design.widget.TabLayout$1.onClick(TabLayout.java:665)
>                       at android.view.View.performClick(View.java:5198)
>                       at android.view.View$PerformClick.run(View.java:21147)
>                       at android.os.Handler.handleCallback(Handler.java:739)
>                       at android.os.Handler.dispatchMessage(Handler.java:95)
>                       at android.os.Looper.loop(Looper.java:148)
>                       at android.app.ActivityThread.main(ActivityThread.java:5417)
>                       at java.lang.reflect.Method.invoke(Native Method)
>                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
>                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
@Override
public void setMenuVisibility(final boolean visible) {
    super.setMenuVisibility(visible);
    if (visible)
    {
        if(getView()!=null)
            adapter.notifyDataSetChanged();
    }
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    View rootView = inflater.inflate(R.layout.favorite_fragment, container, false);
    Realm realm = Realm.getInstance(getActivity());
    RealmResults<favorite> results1 =
            realm.where(favorite.class).findAll();

    List<favorite> data  = results1;
    rView =(RecyclerView)rootView.findViewById(R.id.favorite_layout);
    GridLayoutManager glm_fav = new GridLayoutManager(getActivity(),3, LinearLayoutManager.VERTICAL,false);
    rView.setLayoutManager(glm_fav);
    adapter = new FavoritesAdapter(data);

    if(data!=null)
        adapter.notifyDataSetChanged();

    rView.setAdapter(adapter);
    return rootView;
}