-1

thisガイドの後にRecyclerViewを作成していますが、それが与えるコードは非常に明確ではありませんが、カスタムRecyclerview.Adpaterを構築するとき、それはこの方法があります:RelativeLayoutをLayoutInflatorのTextViewにキャストすることはできません

@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はどこから来たのかを見つけ出すように見えることはできません。彼らはレイアウトファイルでそれを指定しませんでした。だから、そのコードを私のアダプターに入れようとしたとき、それはシンボルが見つからなかったと私に言いました。

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

をしかし、それはまだそれを見つけることができないので、私はまだR.layout.my_text_viewmy_text_viewを使用することはできません:だから、私は私のTextViewへのidとしてこれを追加しました。私もR.id.my_text_viewを試しました。それはです。が見つかりましたが、それはidではなくレイアウトが必要だと言います。

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

しかし、それは動作しませんでした、と私は例外を取得:ので、私はこのような R.layout.activity_recycleを使用してみました

とjava.lang.ClassCastException:android.widget.RelativeLayoutがアンドロイドにキャストすることはできません.widget.TextView

私は何が欠けていますか?この神秘的なmy_text_viewはどこから来たのですか?どうすれば使用できますか?

+0

R.layout.activity_recycleはレイアウトですtextviewはレイアウトをとりません。それはレイアウト項目IDをとるでしょう。 –

+0

R.layout.my_text_viewは、リストアイテム –

+0

と同じように、リサイクラビューで膨らませるレイアウトやカードのようなものです。この回答をチェックして、そのチュートリアルに従ってください。http://stackoverflow.com/a/41499210/7130121 –

答えて

0

あなたはRelativeLayoutの内側にあるTextViewを膨張しようとしていますか?代わりに、最初に完全なレイアウトを展開し、レイアウト内で使用できるサブビューを見つけようとします。

は、たとえば、あなたのレイアウトにid activity_recycleとRelativeLayoutを第一にそれを膨らませると、レイアウト内の親のレイアウトとしてRelativeLayoutViewまたは直接にそれを投げ、item_recycle_layout.xmlであると言います。

たとえば、アイテムのレイアウトは次のとおりです。

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


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

</RelativeLayout> 

今のコードの下には、お使いのアダプタにする必要があります:RecyclerView.AdapterのonCreateViewHolderを使用した場合

@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

は基本的に、それはビューに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"/> 

今、あなたは上記と同じコードの残りの部分を使用することができます。

関連する問題