2016-08-01 2 views
1

я получаю ошибку:ClassCastException на layoutInflater.inflate (...)

java.lang.ClassCastException: android.widget.FrameLayout cannot be cast to android.widget.LinearLayout 

Всякий раз, когда выполняется следующее:

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext()); 
    LinearLayout mLinearLayout = (LinearLayout) layoutInflater.inflate(R.layout.item, parent, false); 
    return new ViewHolder(mLinearLayout); 
} 

Когда не имеет смысла, потому что это мой файл XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:orientation="vertical" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

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

</LinearLayout> 

Таким образом, корень файла XML должен быть LinearLayout, поэтому инфлятор должен возвращать LinearLayout, где я s он получает FrameLayout?

+0

Является ли это xml файла под названием 'item' в папке макета? – Vucko

+0

Да, это так. [15chars] – CaptainForge

+1

Зачем вам нужно снимать? Просто используйте 'View v = inflater.inflate' –

ответ

2

Заменить

LinearLayout mLinearLayout = (LinearLayout) layoutInflater.inflate(R.layout.item, parent, false); 
return new ViewHolder(mLinearLayout); 

По

View view = layoutInflater.inflate(R.layout.item, parent, false); 
return new ViewHolder(view); 

EDIT

Общественный конструктор ViewHolder ожидает View не LinearLayout. Если вам необходимо получить доступ к ребенку этой схемы, как LinearLayout вы должны получить доступ к его из findViewById, например:

Ваш Компоновка Пункт

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/your_linear_layout_id" 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

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

</LinearLayout> 

Ваш ViewHolder

public class ExampleViewHolder extends RecyclerView.ViewHolder{ 

    public ExampleViewHolder(View itemView) { 
     super(itemView); 
     LinearLayout linearLayout = (LinearLayout) itemView.findViewById(R.id.your_linear_layout_id); 
    } 
} 

onCreateViewHolder

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = layoutInflater.inflate(R.layout.item, parent, false); 
    return new ViewHolder(view); 
} 
+0

Прочитайте комментарии выше. Кажется, что LinearLayout может быть необходимо –

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