使用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
答案 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膨胀错误。
可能这对未来的某些人有帮助,而不是像我一样浪费时间。