2015-12-14 2 views
1

Так что я использую два RecyclerViews в фрагменте в моем приложении для Android. Один из них прокручивается по горизонтали, а другие свитки вертикально. Тем не менее, по какой-то странной причине вертикальная всегда падает со следующей ошибкой:Вертикальный LinearLayoutManager Crashes App

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 в fragment_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

ли вы собираетесь иметь ваш 'nearbyRecycler' также использовать' buddiesAdapter' или его собственный адаптер? – akodiakson

+0

В конечном итоге я использую второй адаптер для 'nearbyRecycler', но сейчас я просто использую тот же самый, чтобы изолировать проблему от ориентации макета. –

ответ

0

Я понял! Поэтому я совершенно не знаю, почему это было проблемой, но корень проблемы заключался в том, что мой фрагмент находился внутри пейджера представления. Я вытащил его из плейера представления и добавил фрагмент через транзакцию фрагмента.

Мой предыдущий способ добавления фрагмента был таким образом.

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>