-1

umgewandelt werden. Ich habe this Leitfaden auf die Erstellung einer RecyclerView, aber ich habe in einen Haken geraten. Der Code gibt es ist nicht ganz klar, aber wenn die benutzerdefinierte Gebäude Recyclerview.Adpater, hat diese Methode:RelativeLayout kann nicht in TextView in 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; 
} 

Nun, ich kann nicht scheinen, um herauszufinden, wo die R.layout.my_text_view herkam. Sie haben es nicht in ihrer Layoutdatei angegeben. Also, als ich versuchte, diesen Code in meinen Adapter zu stecken, sagte er mir, dass das Symbol nicht gefunden wurde. Also, habe ich es als id meine 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> 

Aber ich kann immer noch nicht my_text_view in R.layout.my_text_view verwenden, weil es immer noch nicht finden kann. Ich habe auch versucht R.id.my_text_view, die es kann finden, aber es sagt, dass es ein Layout braucht, nicht eine ID. so habe ich versucht, R.layout.activity_recycle wie folgt aus:

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

Aber das hat nicht funktioniert, und ich bekomme die Ausnahme:

java.lang.ClassCastException: android.widget.RelativeLayout kann nicht auf Android gegossen wird .widget.TextView

Was fehlt mir? Woher kam dieses geheimnisvolle my_text_view, und wie benutze ich es?

+0

R.layout.activity_recycle ist Layout Textansicht nimmt kein Layout. Es wird die ID des Layoutelements übernommen. –

+0

R.layout.my_text_view ist so etwas wie ein Layout oder eine Karte, die auf Ihre Recycler-Ansicht aufblähen, wie das Listenelement –

+0

diese Antwort überprüfen und diesem Tutorial folgen http://StackOverflow.com/a/41499210/7130121 –

Antwort

0

Fehler, den Sie tun, ist, versuchen Sie, TextView aufzublasen, die in RelativeLayout ist. Erweitern Sie stattdessen zuerst das gesamte Layout und versuchen Sie, im Layout verfügbare Unteransichten zu finden.

Sagen Sie zum Beispiel, Ihr Layout item_recycle_layout.xml ist, aufblasen es zuerst und wirft sie in View oder direkt in RelativeLayout als übergeordnetem Layout in Ihrem Layout RelativeLayout mit id activity_recycle.

Zum Beispiel Ihre Artikel Layout ist:

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


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

</RelativeLayout> 

Jetzt Code unten in Ihrem Adapter sein sollte:

@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

So was _should_ wie sieht mein Layout aus? –

+0

Down-Wähler, bitte nennen Sie den Grund für die Down-Stimmen! –

+0

@CacheStaheli Überprüfen Sie die aktualisierte Antwort! –

2

Grundsätzlich, wenn RecyclerView.Adapter des onCreateViewHolder verwenden, ist es die viewholder zu der Ansicht zurück des Listenelements. ViewHolder wird verwendet, um ein einzelnes Listenelement (oder eine einzelne Zeile) in einem RecyclerView aufzublasen.

Sie sollten ein Layout für ein Listenelement erstellen, das Sie zu RecyclerView hinzufügen möchten. Zum Beispiel R.layout.my_text_view sollte nur diese Textview enthalten:

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

Jetzt können Sie Rest des Codes wie oben verwenden.

Verwandte Themen