4

У меня есть проблема в моем макете NavigationDrawer с ошибкой:android.widget.RelativeLayout не может быть приведен к android.support.v7.widget.RecyclerView

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> 

Я не знаю, как она не может бросить Относительный Макет .. Тот же сбой с LinearLayout.

+0

Вы отбрасываете свой макет (RelativeLayout) в RecycleView в 'mRecyclerView = (RecyclerView) inflater.inflate (R.layout.fragment_drawer, container, false); вы не можете сделать, чего не можете сделать – zgc7009

+0

Да, но как я могу это сделать? Мне нужно поставить изображение поверх моего recycleview. если я поместил изображение в свой item_drawer.xml (это тот же макет, в котором я помещал элементы TextView в recycleview), он показывает мне изображение не один раз, а для каждого элемента адаптера. Итак, у меня есть (Banner - textview, Banner - textview, Banner - textview) и не (Banner, textview, textview, textview) Понимайте, что я имею в виду? –

ответ

4
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); 

Здесь мы получаем RecyclerView, найдя @android:id/list виджет внутри надутого макета.

+0

Это правильный способ поблагодарить вас! Оно работает! –

Смежные вопросы