【问题标题】:Vertical LinearLayoutManager Crashes AppVertical LinearLayoutManager 使应用程序崩溃
【发布时间】:2016-03-20 11:50:45
【问题描述】:

所以我在我的 android 应用程序的一个片段中使用了两个 RecyclerViews。其中一个水平滚动,另一个垂直滚动。然而由于某种奇怪的原因,垂直的总是崩溃并出现以下错误:

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

fragment_home.xml 中的 RecyclerViews

<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 就会在我滚动时崩溃。有什么建议吗?

【问题讨论】:

  • 您是否打算让您的nearbyRecycler 也使用buddiesAdapter 或它自己的适配器?
  • 我最终会为nearbyRecycler 使用第二个适配器,但现在我只是使用同一个适配器来隔离布局方向的问题。

标签: android android-recyclerview linearlayoutmanager


【解决方案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>

【讨论】:

    猜你喜欢
    • 2017-11-10
    • 2012-08-18
    • 2012-02-12
    • 2014-03-18
    • 2014-11-14
    • 2018-12-05
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多