-1

Я слежу за this руководство по созданию RecyclerView, но я столкнулся с препятствием. Код дает не очень понятно, но при создании пользовательских Recyclerview.Adpater, то есть этот метод:RelativeLayout нельзя отнести к TextView в LayoutInflator

@Override 
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, 
               int viewType) { 
    // create a new view 
    TextView v = (TextView) LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.my_text_view, parent, false); 
    // set the view's size, margins, paddings and layout parameters 
    ... 
    ViewHolder vh = new ViewHolder(v); 
    return vh; 
} 

Теперь я не могу показаться, чтобы выяснить, где R.layout.my_text_view пришел. Они не указали это в своем файле макета. Итак, когда я попытался вставить этот код в свой адаптер, он сказал мне, что символ не найден. Таким образом, я добавил его в качестве идентификатора к моему TextView:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_recycle" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".recycle.RecycleActivity"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recycler_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     tools:context=".recycle.RecycleActivity"/> 

    <include 
     layout="@layout/toolbar_main" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 

    <TextView 
     android:id="@+id/my_text_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 
</RelativeLayout> 

Но я до сих пор не могу использовать my_text_view в R.layout.my_text_view, потому что до сих пор не может найти его. Я также попробовал R.id.my_text_view, который он может найти, но он говорит, что ему нужен макет, а не идентификатор. поэтому я попытался с помощью R.layout.activity_recycle так:

@Override 
public RecycleViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) 
{ 
    // create a new view 
    TextView v = (TextView) LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.activity_recycle, parent, false); 
    // set the view's size, margins, paddings and layout parameters 

    return new ViewHolder(v); 
} 

Но это не сработало, и я получаю исключение:

java.lang.ClassCastException: android.widget.RelativeLayout не может быть приведен к андроида .widget.TextView

Что мне не хватает? Откуда появился этот таинственный my_text_view и как его использовать?

+0

R.layout.activity_recycle - это текстовое представление макета не принимает макет. он примет идентификатор элемента макета. –

+0

R.layout.my_text_view - это что-то вроде макета или карты, которые будут раздуваться на вашем просмотре ресайклера, аналогично элементу списка –

+0

, чтобы проверить этот ответ и следовать этому учебнику http://stackoverflow.com/a/41499210/7130121 –

ответ

0

Ошибка, которую вы делаете, вы пытаетесь раздуть TextView, который находится внутри RelativeLayout. Вместо этого сначала раздуйте полный макет и попробуйте найти подменю, доступные внутри макета.

Скажет, например, ваш макет item_recycle_layout.xml, надуть его первым и бросил его в View или непосредственно в RelativeLayout в качестве родительского расположения внутри вашего макета RelativeLayout с идентификатором activity_recycle.

Например, макет элемент:

<RelativeLayout 
    ..... 
    ..... > 


    <TextView 
     android:id="@+id/my_text_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

</RelativeLayout> 

Теперь ниже код должен быть в вашем адаптере:

@Override 
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, 
               int viewType) { 
    // create a new view 
    RelativeLayout v = (RelativeLayout) LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.item_recycle_layout, parent, false); 
    TextView txtView = (TextView) v.findViewById(R.id.my_text_view); 

    .... 
    .... 

    ViewHolder vh = new ViewHolder(v); 
    return vh; 
} 
+0

Так что же _should_ мой макет выглядит? –

+0

Вниз избирателей, пожалуйста, укажите причину пустых голосов! –

+0

@CacheStaheli проверить обновленный ответ! –

2

В основном при использовании onCreateViewHolder RecyclerView.Adapter, он возвращает viewholder к просмотру элемента списка. ViewHolder используется для раздувания единого элемента списка (или строки) в RecyclerView.

Вы должны создать макет для элемента списка, который вы хотите добавить в RecyclerView. Например R.layout.my_text_view должен содержать только этот TextView:

<TextView 
    android:id="@+id/my_text_view_detail" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"/> 

Теперь вы можете использовать остальную часть кода же, как описано выше.

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