java - 当我从一个 fragment 滑动到另一个 fragment 时,我的应用程序崩溃了(错误 : canScrollHorizontally()' on a null object reference)

标签 java android android-fragments android-activity android-recyclerview

我一直在尝试解决这个问题,但没有结果。我的应用程序由 4 个 fragment 组成,第二个 fragment 具有回收器 View 。当我从第一个滑动到第二个时,我的应用程序立即崩溃。并且在 logCat 中出现此错误:

Attempt to invoke virtual method 'boolean android.support.v7.widget.RecyclerView$LayoutManager.canScrollHorizontally()' on a null object reference at android.support.v7.widget.RecyclerView.onInterceptTouchEvent(RecyclerView.java:2022)

这是我的主要 Activity 代码:

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);
    toolbar = (Toolbar) findViewById(R.id.app_bar);
    if (toolbar != null) {
        toolbar.setTitle("Quick!");
    }
    setSupportActionBar(toolbar);

    fragmentList.add(HomeFragment.getInstance(0));
    fragmentList.add(KartFragment.getInstance(1));
    fragmentList.add(FavouriteFragment.getInstance(2));
    fragmentList.add(ScannerFrag.getInstance(3));


    pager = (ViewPager) findViewById(R.id.Pager);
    pager.setAdapter(new myPagerAdapter(getSupportFragmentManager()));
    tab = (SlidingTabLayout) findViewById(R.id.SlidingTab);
    tab.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() {
        @Override
        public int getIndicatorColor(int position) {
            return getResources().getColor(R.color.accentColor);
        }
    });
    tab.setViewPager(pager);
}

class myPagerAdapter extends FragmentPagerAdapter {

    String[] tabs;

    public myPagerAdapter(FragmentManager fm) {
        super(fm);
        tabs = getResources().getStringArray(R.array.tabs);
    }

    @Override
    public Fragment getItem(int position) {
        return fragmentList.get(position);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return tabs[position];
    }

    public int getCount() {
        return fragmentList.size();
    }
}

主页 fragment :

public class HomeFragment extends Fragment {

    private Toolbar toolbar;


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

        View layout;
        layout = inflater.inflate(R.layout.home_layout, container, false);
        toolbar = (Toolbar) layout.findViewById(R.id.subToolbar);
        toolbar.setTitle("Dove mangi oggi?");

        return layout;
    }

    public static HomeFragment getInstance(int position) {
        HomeFragment frag = new HomeFragment();
        Bundle args = new Bundle();
        args.putInt("position", position);
        frag.setArguments(args);
        return frag;
    }

}

卡丁车 fragment :

public class KartFragment extends Fragment {

    private Toolbar toolbar;
    private ItemAdapter ad;
    private RecyclerView rv;
    private ArrayList list = new ArrayList<>();
    private static final String SAVELIST = "SAVELIST";


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

        super.onCreate(savedInstanceState);
        View layout;


       if (savedInstanceState != null) {
            list = savedInstanceState.getParcelableArrayList(SAVELIST);
        } else {
            list = KartObjectClass.listBuilder(10);
        }


        layout = inflater.inflate(R.layout.fragment_layout, container, false);


        toolbar = (Toolbar) layout.findViewById(R.id.subToolbar);
        toolbar.setTitle("I tuoi ordini:");


        rv = (RecyclerView) layout.findViewById(R.id.list);


        rv.setLayoutManager(new LinearLayoutManager(getActivity()));
        ad = new ItemAdapter(list);
        rv.setHasFixedSize(true);
        rv.setAdapter(ad);


        return layout;
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
       outState.putParcelableArrayList(SAVELIST, list);
        super.onSaveInstanceState(outState);

    }


    public static KartFragment getInstance(int position) {
        KartFragment frag = new KartFragment();
        Bundle args = new Bundle();
        args.putInt("position", position);
        frag.setArguments(args);
        return frag;
    }

}

最喜欢的 fragment :

public class FavouriteFragment extends Fragment {

    private Toolbar toolbar;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View layout = null;
        layout = inflater.inflate(R.layout.scanner_layout, container, false);
        toolbar = (Toolbar) layout.findViewById(R.id.subToolbar);
        toolbar.setTitle("I tuoi preferiti:");
        return layout;
    }

    public static FavouriteFragment getInstance(int position) {
        FavouriteFragment frag = new FavouriteFragment();
        Bundle args = new Bundle();
        args.putInt("position", position);
        frag.setArguments(args);
        return frag;
    }

}

最佳答案

尝试在 RecyclerView 上设置 Adapter 之前设置 LayoutManager。

关于java - 当我从一个 fragment 滑动到另一个 fragment 时,我的应用程序崩溃了(错误 : canScrollHorizontally()' on a null object reference),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31219958/

相关文章:

java - Jetty + Jersey + Jackson,Eclipse(成功)与命令行(错误不支持的媒体类型)中的不同行为!

N皇后: a StackOverFlow error的Java回溯程序

java - 检查整个数组是否为instanceof

java - 使用不同构造函数的对象实例化

java - Eclipse ADT 错误 : Cannot run program adb

android - 致命异常 AsyncTask #1 和 Android doInBackground()

android - 如何在类中获取 FragmentManager extends LinearLayout?

java - 您可以使用 Facebook SDK 为照片添加标题吗

android - 如何在recyclerview中实现分页?

android - getActivity().findViewById 返回 null,从 fragment onActivityCreated 调用