android.widget.RelativeLayout 无法转换为 android.support.v7.widget.RecyclerView

android.widget.RelativeLayout cannot be cast to android.support.v7.widget.RecyclerView

我的 NavigationDrawer 布局出现错误:

android.widget.RelativeLayout cannot be cast to android.support.v7.widget.RecyclerView

这是我的 onCreateView:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        mRecyclerView = (RecyclerView) inflater.inflate(R.layout.fragment_drawer, container, false);
        mRecyclerView.setClipToPadding(false);
        mAdapter = new NavigationDrawerAdapter(getActivity(), new NavigationDrawerAdapter.ClickListener() {
            @Override
            public void onClick(int index) {
                selectItem(index);
            }

            @Override
            public boolean onLongClick(final int index) {
                Pins.Item item = mAdapter.getItem(index);
                Utils.showConfirmDialog(getActivity(), R.string.remove_shortcut,
                        R.string.confirm_remove_shortcut, item.getDisplay(getActivity()), new CustomDialog.SimpleClickListener() {
                            @Override
                            public void onPositive(int which, View view) {
                                Pins.remove(getActivity(), index);
                                mAdapter.reload(getActivity());
                            }
                        }
                );
                return false;
            }
        });
        mRecyclerView.setAdapter(mAdapter);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        mAdapter.setCheckedPos(mCurrentSelectedPosition);
        return mRecyclerView;
    }

这是 fragment_drawer 布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:id="@+id/cover_bg"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:adjustViewBounds="true"
        android:scaleType="centerCrop"
        android:src="@drawable/banner" />

    <android.support.v7.widget.RecyclerView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/cover_bg"
        android:background="?drawer_background"
        android:scrollbars="vertical" />

</RelativeLayout>

我不知道它为什么不能投射 RelativeLayout。与 LinearLayout 一样崩溃。

mRecyclerView = (RecyclerView) inflater.inflate(R.layout.fragment_drawer, container, false);

您的 fragment_drawer 布局没有 RecyclerView 作为其根元素。它有一个 RelativeLayout 作为它的根元素。因此,inflate() 将返回 RelativeLayout,它本身内部有 RecyclerView

将您的代码更改为:

View drawer = inflater.inflate(R.layout.fragment_drawer, container, false);
mRecyclerView = (RecyclerView) drawer.findViewById(android.R.id.list);

在这里,我们通过在展开的布局中找到 @android:id/list 小部件来获得 RecyclerView