2015-11-24 27 views
35

I listview mit Einträgen verwendet haben Attribut wie folgt:android: Einträge in recyclerview

<ListView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:entries="@array/fi"/> 

Jetzt bin ich es RecyclerView

<android.support.v7.widget.RecyclerView 
    android:id="@+id/rv" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

Ich möchte Umwandlung wissen, ob wir android:entries Attribut in RecyclerView haben ? Oder ein anderes Attribut anstelle von Einträgen?

+0

gibt es keine Option, weil recyclerview keine Basisstandard haben itemxml .Sie adpter für diese –

+2

keine Option Datei erstellen müssen? und wie 'ListView' das macht? Siehe die Quellen von 'ListView' dann, [hier] (http://androidxref.com/6.0.0_r1/xref/frameworks/base/core/java/android/widget/ListView.java#161) zum Beispiel – pskink

+0

@pskink thnks für wertvollen Kommentar, also gibt es keinen anderen Weg, als Adapter zu erstellen? Wir können keine Artikelwerte aus XML zuweisen, oder? –

Antwort

36

Wie richtig in den anderen Antworten erklärt ist es kein Attribut der RecyclerView von xml zu füllen. Doch mit der Android Databinding Sie ganz einfach ein ähnliches Attribut erstellen:

<?xml version="1.0" encoding="utf-8"?> 
<layout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <android.support.v7.widget.RecyclerView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:entries="@{@stringArray/fi}" 
     app:layoutManager="android.support.v7.widget.LinearLayoutManager"/> 
</layout> 

Hier die Bindung Adapter Definition:

import android.databinding.BindingAdapter; 

public class RecyclerViewBindings { 

    @BindingAdapter("entries") 
    public static void entries(RecyclerView recyclerView, String[] array) { 
     recyclerView.setAdapter(new SimpleArrayAdapter(array)); 
    } 

    static class SimpleArrayAdapter extends RecyclerView.Adapter<SimpleHolder> { 

     private final String[] mArray; 

     public SimpleArrayAdapter(String[] array) { 
      mArray = array; 
     } 

     @Override 
     public SimpleHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
      final LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
      final View view = inflater.inflate(android.R.layout.simple_list_item_1, parent, false); 
      return new SimpleHolder(view); 
     } 

     @Override 
     public void onBindViewHolder(SimpleHolder holder, int position) { 
      holder.mTextView.setText(mArray[position]); 
     } 

     @Override 
     public int getItemCount() { 
      return mArray.length; 
     } 
    } 

    static class SimpleHolder extends RecyclerView.ViewHolder { 

     private final TextView mTextView; 

     public SimpleHolder(View itemView) { 
      super(itemView); 
      mTextView = (TextView) itemView.findViewById(android.R.id.text1); 
     } 
    } 
} 

Dann müssen Sie die DataBindingUtil Methoden für das Layout aufzublasen.

aufblasen innerhalb einer Aktivität:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    DataBindingUtil.setContentView(this, R.layout.content_main); 
} 

in einem Fragment aufpumpen:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    ContentMainBinding bindings = DataBindingUtil.inflate(inflater, R.layout.content_main, container, false); 
    return bindings.getRoot(); 
} 
+0

Dies ist neue Informationen für mich, Sie machte einen hoffnungslosen Thread in eine sehr nützliche Eins mit dieser Antwort allein! Bravo. Was ich wissen möchte ist, wie der BindingAdapter mit unserer speziellen Recycleransicht verbunden ist? – Bhargav

+5

Dies sollte akzeptiert werden Antwort –

+0

@Riccardo: Kein Adapter angeschlossen; Layout überspringen Dieser Fehler wird angezeigt –

5

Nein. In RecyclerView ist kein direkt verfügbares Attribut vorhanden. Sie müssen es von Java-Code programmatisch mit LayoutManager und RecyclerView.Adapter tun. Refer this answer.

GRUND: Wie wir wissen, RecyclerView nicht aufblasen, bis wir eine LayoutManager darauf eingestellt. Außerdem ist LayoutManager erforderlich, um einzelne Artikelansichten von RecyclerView aufzublasen. Diese einzelnen Artikelansichten werden von der RecyclerView.Adapter abgerufen. Bis Sie also LayoutManager und RecyclerView.Adapter auf RecyclerView setzen, können Sie RecyclerView nicht verwenden.

Ich hoffe, diese Antwort hilft Ihnen.