我一直在尝试解决这个问题,但没有结果。我的应用程序由 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/