ClassCastException при вызове ListView.addHeaderView ()?

У меня довольно сложный макет (содержащий RelativeLayouts, TextViews и ImageViews), которые я хочу разместить над списком. Это представление должно прокручиваться списком.

Я попытался добавить макет в виде заголовка в список, используя этот код:

View v = inflater.inflate(R.layout.list_view, container, false); View header = inflater.inflate(R.layout.header_layout, container, false); // populate views in the header mList = (ListView)v.findViewById(R.id.list); mList.addHeaderView(header); mAdapter = new ReviewsAdapter(getActivity()); mList.setAdapter(mAdapter); <-- error occurs here 

ReviewsAdapter – это настраиваемый адаптер, который я написал, который расширяет BaseAdapter .

После выполнения кода я получаю эту ошибку:

 11-25 17:19:14.802: E/AndroidRuntime(1215): java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams 11-25 17:19:14.802: E/AndroidRuntime(1215): at android.widget.ListView.clearRecycledState(ListView.java:513) 11-25 17:19:14.802: E/AndroidRuntime(1215): at android.widget.ListView.resetList(ListView.java:499) 11-25 17:19:14.802: E/AndroidRuntime(1215): at android.widget.ListView.setAdapter(ListView.java:442) 11-25 17:19:14.802: E/AndroidRuntime(1215): at com.coppi.storefront.product.ProductReviewsFragment.onCreateView(ProductReviewsFragment.java:104) 

Если я прокомментирую mList.addHeaderView(header) я не получу ошибку. Я также могу отображать макет заголовка без списка без проблем.

Я предполагаю, что это имеет какое-то отношение к содержимому макета заголовка, но я не уверен, что именно это вызвало бы его.

Вот заголовок xml:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" > <RelativeLayout android:id="@+id/header_section" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/margin_sides" android:background="@color/pdp_availability_section_background" > <TextView android:id="@+id/header_text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="@dimen/margin_sides" android:paddingBottom="@dimen/margin_sides" android:text="@string/ratings_reviews" android:textColor="#000" android:textSize="18dp" /> </RelativeLayout> <RelativeLayout android:id="@+id/body_section" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_below="@id/header_section" > <TextView android:id="@+id/product_title" style="@style/ProductTitleFont" android:layout_marginBottom="@dimen/product_title_bottom_margin" android:layout_marginLeft="@dimen/margin_sides" android:layout_marginRight="@dimen/margin_sides" /> <RelativeLayout android:id="@+id/attributes_section" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/product_title" android:layout_centerHorizontal="true" android:layout_margin="@dimen/margin_sides" > <LinearLayout android:id="@+id/overall_section" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="bottom" > <TextView android:id="@+id/overall_label" style="@style/ProductTitleFont" android:layout_width="wrap_content" android:text="@string/overall_rating" /> <ImageView android:id="@+id/overall_1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:src="@drawable/icon_rating_empty" /> <ImageView android:id="@+id/overall_2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon_rating_empty" /> <ImageView android:id="@+id/overall_3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon_rating_empty" /> <ImageView android:id="@+id/overall_4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon_rating_empty" /> <ImageView android:id="@+id/overall_5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon_rating_empty" /> <TextView android:id="@+id/overall_score" style="@style/ProductTitleFont" android:layout_width="wrap_content" android:layout_marginLeft="10dp" android:text="4.6" /> </LinearLayout> <Button android:id="@+id/rate_review_button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@id/overall_section" android:layout_marginBottom="@dimen/margin_sides" android:layout_marginTop="@dimen/margin_sides" android:text="@string/rate_review_button_text" /> </RelativeLayout> <View android:id="@+id/attributes_divider" android:layout_width="fill_parent" android:layout_height="1dp" android:layout_below="@id/attributes_section" android:layout_marginBottom="@dimen/margin_sides" android:layout_marginTop="@dimen/margin_sides" android:background="@color/pdp_section_divider" /> <TextView android:id="@+id/review_count" style="@style/ProductTitleFont" android:layout_width="wrap_content" android:layout_below="@id/attributes_divider" android:layout_marginLeft="@dimen/margin_sides" android:text="0 " /> <TextView style="@style/ProductTitleFont" android:layout_width="wrap_content" android:layout_alignBaseline="@id/review_count" android:layout_marginRight="@dimen/margin_sides" android:layout_toRightOf="@id/review_count" android:text="@string/customer_reviews" /> <View android:id="@+id/review_count_divider" android:layout_width="fill_parent" android:layout_height="1dp" android:layout_below="@id/review_count" android:layout_marginBottom="@dimen/margin_sides" android:layout_marginTop="@dimen/margin_sides" android:background="@color/pdp_section_divider" /> </RelativeLayout> </RelativeLayout> 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" > <RelativeLayout android:id="@+id/header_section" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/margin_sides" android:background="@color/pdp_availability_section_background" > <TextView android:id="@+id/header_text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="@dimen/margin_sides" android:paddingBottom="@dimen/margin_sides" android:text="@string/ratings_reviews" android:textColor="#000" android:textSize="18dp" /> </RelativeLayout> <RelativeLayout android:id="@+id/body_section" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_below="@id/header_section" > <TextView android:id="@+id/product_title" style="@style/ProductTitleFont" android:layout_marginBottom="@dimen/product_title_bottom_margin" android:layout_marginLeft="@dimen/margin_sides" android:layout_marginRight="@dimen/margin_sides" /> <RelativeLayout android:id="@+id/attributes_section" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/product_title" android:layout_centerHorizontal="true" android:layout_margin="@dimen/margin_sides" > <LinearLayout android:id="@+id/overall_section" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="bottom" > <TextView android:id="@+id/overall_label" style="@style/ProductTitleFont" android:layout_width="wrap_content" android:text="@string/overall_rating" /> <ImageView android:id="@+id/overall_1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:src="@drawable/icon_rating_empty" /> <ImageView android:id="@+id/overall_2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon_rating_empty" /> <ImageView android:id="@+id/overall_3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon_rating_empty" /> <ImageView android:id="@+id/overall_4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon_rating_empty" /> <ImageView android:id="@+id/overall_5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon_rating_empty" /> <TextView android:id="@+id/overall_score" style="@style/ProductTitleFont" android:layout_width="wrap_content" android:layout_marginLeft="10dp" android:text="4.6" /> </LinearLayout> <Button android:id="@+id/rate_review_button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@id/overall_section" android:layout_marginBottom="@dimen/margin_sides" android:layout_marginTop="@dimen/margin_sides" android:text="@string/rate_review_button_text" /> </RelativeLayout> <View android:id="@+id/attributes_divider" android:layout_width="fill_parent" android:layout_height="1dp" android:layout_below="@id/attributes_section" android:layout_marginBottom="@dimen/margin_sides" android:layout_marginTop="@dimen/margin_sides" android:background="@color/pdp_section_divider" /> <TextView android:id="@+id/review_count" style="@style/ProductTitleFont" android:layout_width="wrap_content" android:layout_below="@id/attributes_divider" android:layout_marginLeft="@dimen/margin_sides" android:text="0 " /> <TextView style="@style/ProductTitleFont" android:layout_width="wrap_content" android:layout_alignBaseline="@id/review_count" android:layout_marginRight="@dimen/margin_sides" android:layout_toRightOf="@id/review_count" android:text="@string/customer_reviews" /> <View android:id="@+id/review_count_divider" android:layout_width="fill_parent" android:layout_height="1dp" android:layout_below="@id/review_count" android:layout_marginBottom="@dimen/margin_sides" android:layout_marginTop="@dimen/margin_sides" android:background="@color/pdp_section_divider" /> </RelativeLayout> </RelativeLayout> 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" > <RelativeLayout android:id="@+id/header_section" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/margin_sides" android:background="@color/pdp_availability_section_background" > <TextView android:id="@+id/header_text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="@dimen/margin_sides" android:paddingBottom="@dimen/margin_sides" android:text="@string/ratings_reviews" android:textColor="#000" android:textSize="18dp" /> </RelativeLayout> <RelativeLayout android:id="@+id/body_section" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_below="@id/header_section" > <TextView android:id="@+id/product_title" style="@style/ProductTitleFont" android:layout_marginBottom="@dimen/product_title_bottom_margin" android:layout_marginLeft="@dimen/margin_sides" android:layout_marginRight="@dimen/margin_sides" /> <RelativeLayout android:id="@+id/attributes_section" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/product_title" android:layout_centerHorizontal="true" android:layout_margin="@dimen/margin_sides" > <LinearLayout android:id="@+id/overall_section" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="bottom" > <TextView android:id="@+id/overall_label" style="@style/ProductTitleFont" android:layout_width="wrap_content" android:text="@string/overall_rating" /> <ImageView android:id="@+id/overall_1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:src="@drawable/icon_rating_empty" /> <ImageView android:id="@+id/overall_2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon_rating_empty" /> <ImageView android:id="@+id/overall_3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon_rating_empty" /> <ImageView android:id="@+id/overall_4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon_rating_empty" /> <ImageView android:id="@+id/overall_5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon_rating_empty" /> <TextView android:id="@+id/overall_score" style="@style/ProductTitleFont" android:layout_width="wrap_content" android:layout_marginLeft="10dp" android:text="4.6" /> </LinearLayout> <Button android:id="@+id/rate_review_button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@id/overall_section" android:layout_marginBottom="@dimen/margin_sides" android:layout_marginTop="@dimen/margin_sides" android:text="@string/rate_review_button_text" /> </RelativeLayout> <View android:id="@+id/attributes_divider" android:layout_width="fill_parent" android:layout_height="1dp" android:layout_below="@id/attributes_section" android:layout_marginBottom="@dimen/margin_sides" android:layout_marginTop="@dimen/margin_sides" android:background="@color/pdp_section_divider" /> <TextView android:id="@+id/review_count" style="@style/ProductTitleFont" android:layout_width="wrap_content" android:layout_below="@id/attributes_divider" android:layout_marginLeft="@dimen/margin_sides" android:text="0 " /> <TextView style="@style/ProductTitleFont" android:layout_width="wrap_content" android:layout_alignBaseline="@id/review_count" android:layout_marginRight="@dimen/margin_sides" android:layout_toRightOf="@id/review_count" android:text="@string/customer_reviews" /> <View android:id="@+id/review_count_divider" android:layout_width="fill_parent" android:layout_height="1dp" android:layout_below="@id/review_count" android:layout_marginBottom="@dimen/margin_sides" android:layout_marginTop="@dimen/margin_sides" android:background="@color/pdp_section_divider" /> </RelativeLayout> </RelativeLayout> 

Обновление: я попытался уменьшить файл .xml заголовка только до одного TextView, и проблема продолжается. Поэтому я не верю, что проблема возникает из-за чего-то в xml.

Solutions Collecting From Web of "ClassCastException при вызове ListView.addHeaderView ()?"

FrameLayout и AbsListView преобразуют свои параметры макета для детей в FrameLayout.LayoutParams и AbsListView.LayoutParams . Это то, где кастинг терпит неудачу.

 View header = View.inflate(this, R.layout.header_layout, null); 

Должен исправить это.

Редактирование: как упоминалось в комментариях, изменение параметра ViewGroup для вызова раздувания также заставляет его работать:

 header = inflater.inflate(R.layout.header_layout, null, false); 

Хотя метод Сувлаки исправит проблему и позволит вам продолжить работу. Всегда лучше, чтобы представление было завышено ссылкой на контейнер, в котором он будет. Это позволяет Android правильно раздувать его для правильного контекста.

Что вам нужно сделать, это найти ListView а затем передать это надувание.

 ListView listView = (ListView) layout.findViewById(R.id.listview); View header = inflater.inflate(this, R.layout.header_layout, listView, false); 

Из вышеприведенного сообщения drspaceboo это сработало для меня:

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mListLayoutView = inflater.inflate(getLayoutId(), container, false); int headerLayoutId = R.layout.list_header_layout; mListHeaderView = inflater.inflate(headerLayoutId, mResourcesListView, false); // ... mResourcesListView.addHeaderView(mListHeaderView, null, false); 

Где getLayoutId () возвращает основной макет, содержащий ListView xml

Я вижу такую ​​же ситуацию. В моем случае, это проблема, связанная с выбором времени для ListView.addHeaderView ().

До: (Ошибка)
ListView.addHeaderView () вызывается в методе Fragment.onCreateView ().

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View layout = inflater.inflate(R.layout.fragment_main, container, false); mListView = (ListView) layout.findViewById(R.id.listview); mListView.addHeaderView(inflater.inflate(R.layout.list_header_book, listview, false)); return layout; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mAdapter = new BookAdapter(getActivity(), mBookList); mListView.setOnItemClickListener(mBookItemClickListener); mListView.setAdapter(mAdapter); } 

После того, как : (OK)
ListView.addHeaderView () вызывается в методе Fragment.onActivityCreated ().

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_main, container, false); } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mAdapter = new BookAdapter(getActivity(), mBookList); mListView = (ListView) getView().findViewById(R.id.listview); mListView.setOnItemClickListener(mBookItemClickListener); mListView.addHeaderView(LayoutInflater.from(getActivity()).inflate(R.layout.list_header_book, null)); mListView.setAdapter(mAdapter); }