2016-08-01 4 views
1

:ClassCastException이 (...) 나는 오류가 계속

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

을 할 때마다 실행되는 다음이 내 xml 파일이기 때문에

@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); 
} 

이 때 이해되지 않는다 : 인플레이터가있는 LinearLayout을 반환해야하므로

<?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 있어야 할 곳에 내가 FrameLayout을 얻었습니까?

+0

레이아웃 폴더에서 'item' 파일의 xml입니까? – Vucko

+0

예, 그렇습니다. [15chars] – CaptainForge

+1

왜 캐스팅해야합니까? 'View v = inflater.inflate' 만 사용하십시오 –

답변

2

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

편집

ViewHolder의 public 생성자는 View 아닌 LinearLayout 예상하여

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

를 교체합니다.

귀하의 항목 레이아웃

<?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

: 당신은 예를 들어, LinearLayout처럼 당신은 findViewById를 출신에 액세스 할 수 있고,이 레이아웃의 자식에 액세스해야하는 경우
@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = layoutInflater.inflate(R.layout.item, parent, false); 
    return new ViewHolder(view); 
} 
+0

위의 설명을 읽으십시오. LinearLayout이 필요할 것 같습니다. –