使用RecyclerView的NavigationDrawerFragment不起作用

时间:2015-06-22 02:41:08

标签: android android-layout android-fragments navigation-drawer android-recyclerview

使用RecyclerView的导航抽屉碎片不适用于除Lollipop设备之外的任何设备,请帮助

NavigationDrawerFragment.java

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    mRecyclerView = (RecyclerView) view.findViewById(R.id.rv_drawer_menu);
    mAdapter = new NavigationAdapter(getActivity(), getItems());
    mRecyclerView.setAdapter(mAdapter);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

}

在除Lollipop之外的所有设备上给出例外。 删除行setLayoutManager会使错误消失但然后RecyclerView无法正常工作

我的build.gradle

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.1.+'
compile 'com.android.support:recyclerview-v7:+'
compile 'com.android.support:support-v4:+'

}

布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="@dimen/navigation_drawer_width"
    android:layout_height="match_parent"
    android:background="@color/backgrounds"
    tools:context="com.xx.xx.supporting.NavigationDrawerFragment">

    <RelativeLayout
        android:id="@+id/rl_pic"
        android:layout_width="@dimen/navigation_drawer_width"
        android:layout_height="wrap_content"
        android:background="@color/backgrounds">

        <ImageView
            android:layout_width="@dimen/navigation_drawer_width"
            android:layout_height="130dp"
            android:layout_marginBottom="@dimen/margin_full"
            android:src="@drawable/img_abstract" />

    </RelativeLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv_drawer_menu"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/rl_pic">

    </android.support.v7.widget.RecyclerView>

</RelativeLayout>

错误

FATAL EXCEPTION: main
android.view.InflateException: Binary XML file line #2: Error inflating class <unknown>
        at android.view.LayoutInflater.createView(LayoutInflater.java:518)
        at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:386)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
        at com.xx.xx.adapters.NavigationAdapter.onCreateViewHolder(NavigationAdapter.java:34)
        at com.xx.xx.adapters.NavigationAdapter.onCreateViewHolder(NavigationAdapter.java:20)
        at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:4783)
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4089)
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:3999)
        at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1892)
        at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1338)
        at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1301)
        at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:534)
        at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2411)
        at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:2709)
        at android.view.View.layout(View.java:7175)
        at android.widget.RelativeLayout.onLayout(RelativeLayout.java:912)
        at android.view.View.layout(View.java:7175)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
        at android.view.View.layout(View.java:7175)
        at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:931)
        at android.view.View.layout(View.java:7175)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1047)

Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.constructNative(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:415)
        at android.view.LayoutInflater.createView(LayoutInflater.java:505)

Caused by: android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x1/d=0x7f02004f a=-1 r=0x7f02004f}
        at android.content.res.Resources.loadDrawable(Resources.java:1681)
        at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
        at android.view.View.<init>(View.java:1951)
        at android.view.View.<init>(View.java:1899)
        at android.view.ViewGroup.<init>(ViewGroup.java:286)
        at android.widget.RelativeLayout.<init>(RelativeLayout.java:173

2 个答案:

答案 0 :(得分:0)

您是否设置了RecyclerView的方向?

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
   mRecyclerView = (RecyclerView) view.findViewById(R.id.rv_drawer_menu);
   LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
   linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
   mRecyclerView.setLayoutManager(linearLayoutManager);
   mAdapter = new NavigationAdapter(getActivity(), getItems());
   mRecyclerView.setAdapter(mAdapter);
}

答案 1 :(得分:0)

您是否检查过libs文件夹中的android-support-v7-recyclerview.jar库?如果是,那么检查您的清单文件是否具有目标sdk版本 21

  <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="21" />

因为在互联网上尝试了所有内容后,我通过将目标从 17 更改为 21 来解决了recyclelerview膨胀错误。

可能这对未来的某些人有帮助,而不是像我一样浪费时间。