簡體   English   中英

當我從一個片段滑動到另一個片段時,我的應用程序崩潰(錯誤:canScrollHorizo​​ntally()' 在空對象引用上)

[英]my app crashes when I swipe from one fragment to another (error: canScrollHorizontally()' on a null object reference)

我一直在嘗試解決這個問題,但沒有結果。 我的應用程序由 4 個片段組成,第二個帶有回收器視圖。 當我從第一個滑動到第二個時,我的應用程序立即崩潰。 在 logCat 中出現此錯誤:

嘗試在 android.support.v7.widget.RecyclerView.onInterceptTouchEvent(RecyclerView.java:2022) 的空對象引用上調用虛擬方法“boolean android.support.v7.widget.RecyclerView$LayoutManager.canScrollHorizo​​ntally()”

這是我的主要活動代碼:

@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();
    }
}

首頁片段:

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

}

卡丁車片段:

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

}

最喜歡的片段:

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。

我解決了這個錯誤,問題是我在 homeFragment XML 中設置了一個回收器視圖。 由於我忘記擁有它,因此我沒有在onCreateView方法中調用它,應用程序崩潰了,因為沒有設置適配器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM