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

End*_*ame 6 android android-layout navigation-drawer android-recyclerview

我的NavigationDrawer布局有问题,但有错误:

android.widget.RelativeLayout cannot be cast to android.support.v7.widget.RecyclerView
Run Code Online (Sandbox Code Playgroud)

这是我的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;
    }
Run Code Online (Sandbox Code Playgroud)

这是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>
Run Code Online (Sandbox Code Playgroud)

我不知道怎么不能抛出RelativeLayout ..与LinearLayout相同的崩溃.

Com*_*are 6

mRecyclerView = (RecyclerView) inflater.inflate(R.layout.fragment_drawer, container, false);
Run Code Online (Sandbox Code Playgroud)

您的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);
Run Code Online (Sandbox Code Playgroud)

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