Вертикальное приложение 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>
Другие вопросы по тегам