Вертикальное приложение LinearLayoutManager Crashes
Поэтому я использую два RecyclerViews в фрагменте в моем приложении для Android. Один из них прокручивается горизонтально, а другой - вертикально. Но по какой-то странной причине вертикальный всегда вылетает со следующей ошибкой:
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.support.v7.widget.RecyclerView$LayoutManager.canScrollHorizontally()' on a null object reference
Вот как я настраиваю RecyclerViews:
@InjectView(R.id.nearby_recycler)
RecyclerView nearbyRecycler;
RecyclerView.LayoutManager nearbyLayoutManager;
@InjectView(R.id.buddies_recycler)
RecyclerView buddiesRecycler;
RecyclerView.LayoutManager buddiesLayoutManager;
public static HomeFragment newInstance(){
return new HomeFragment();
}
public HomeFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View root = inflater.inflate(R.layout.fragment_home, container, false);
ButterKnife.inject(this, root);
nearbyLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false);
nearbyRecycler.setLayoutManager(nearbyLayoutManager);
nearbyRecycler.setAdapter(buddiesAdapter);
buddiesLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
buddiesRecycler.setLayoutManager(buddiesLayoutManager);
buddiesRecycler.setAdapter(buddiesAdapter);
return root;
}
RecyclerViews во фрагменте_home.xml
<android.support.v7.widget.RecyclerView
android:id="@+id/nearby_recycler"
android:layout_width="match_parent"
android:layout_height="@dimen/icon_large"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/buddies_recycler"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
Как только я переключаю ориентацию на Горизонтальную, RecyclerView вылетает, как только я прокручиваю его. Какие-либо предложения?
1 ответ
Я понял! Так что я совершенно не уверен, почему это было проблемой, но корень проблемы был в том, что мой фрагмент был внутри пейджера просмотра. Я пока вынул его из пейджера и добавил фрагмент через транзакцию фрагмента.
Мой предыдущий метод добавления фрагмента был таким.
MainActivity.java
HomeFragment homeFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.inject(this);
homeFragment = HomeFragment.newInstance();
mFragmentPagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public Fragment getItem(int position) {
return homeFragment;
}
@Override
public int getCount() {
return 1;
}
};
}
activity_main.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
tools:context=".ui.MainActivity">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_below="@id/toolbar1"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
Я изменил это на это:
MainActivity.java
HomeFragment homeFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.inject(this);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, homeFragment)
.commit();
}
}
activity_main.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
tools:context=".ui.MainActivity">
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>