【问题标题】:android.widget.RelativeLayout cannot be cast to android.support.v7.widget.RecyclerViewandroid.widget.RelativeLayout 无法转换为 android.support.v7.widget.RecyclerView
【发布时间】:2015-03-29 16:43:45
【问题描述】:

我的 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同样崩溃。

【问题讨论】:

  • 你正在将你的布局(一个RelativeLayout)投射到mRecyclerView = (RecyclerView) inflater.inflate(R.layout.fragment_drawer, container, false); you can't do的RecycleView,你不能这样做
  • 是的,但我该怎么做?我需要在我的recycleview 上放一张图片。如果我将图像放在我的 item_drawer.xml 中(这与我放置 recycleview 的 TextView 项目的布局相同),它会向我显示图像,而不是一次,而是针对适配器的每个项目。所以我有(横幅 - 文本视图,横幅 - 文本视图,横幅 - 文本视图)而不是(横幅,文本视图,文本视图,文本视图)明白我的意思吗?

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


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多