2015-11-24 9 views
35

のエントリは以下のような属性:アンドロイド:私はエントリで<code>listview</code>を使用していたrecyclerview

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

は、今私はRecyclerView

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

に変換しています私たちはRecyclerViewandroid:entries属性を持っているかどうかを知りたいです?またはエントリの代わりに他の属性?

+0

recyclerviewは一切ベースのデフォルトは。あなたがその –

+2

なしオプションのadpterを作成する必要がありますファイルませんitemxml持っているので、オプションはありませんか? 'ListView'がこれをどうやって作るのでしょうか? 'ListView'のソースを見て、[ここ](http://androidxref.com/6.0.0_r1/xref/frameworks/base/core/java/android/widget/ListView.java#161)例えば – pskink

+0

@pskink貴重なコメントのためのthnksので、アダプタを作成する以外の方法はありません? xmlから項目値を割り当てることはできません。 –

答えて

36

のように正しく他の回答で説明したが、XMLからRecyclerViewを埋めるための属性がありません。しかしAndroid Databindingはあなたが非常に簡単に似た属性を作成することができます使用する:ここでは結合アダプタ定義

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

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

は、その後、あなたがレイアウトを膨らませるためDataBindingUtilメソッドを使用する必要があります。アクティビティ内

ふくらませる:

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

がフラグメント内膨らませるには:

@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

これは私にとって新しい情報です。この答えだけで1つ!ブラボー私が知りたいことは、BindingAdapterが特定のリサイクラビューにどのようにリンクしているかです。 – Bhargav

+5

これは受け入れられるはずです –

+0

@リカルド:アダプターが取り付けられていません。レイアウトをスキップします。このエラーを取得する –

5

いいえRecyclerViewに直接使用できる属性はありません。LayoutManagerRecyclerView.Adapterを使用してプログラムでJavaコードから実行する必要があります。 Refer this answer

理由:私たちが知っているように、我々はそれにLayoutManagerを設定するまでRecyclerViewが膨らまなくなります。また、RecyclerViewの個々のアイテムビューを展開するには、LayoutManagerが必要です。これらの個々のアイテムビューはRecyclerView.Adapterから取得されます。したがって、LayoutManagerRecyclerView.AdapterRecyclerViewに設定するまでは、RecyclerViewを使用することはできません。

この回答がお役に立てば幸いです。

0

いいえ、アンドロイドでは、Recyclerviewはアンドロイド保持していない:エントリや属性のように。 RecyclerViewは、リストビューの後継者であるが、まだ不足しているエントリはここ

onclicklistener属性とAndroidの公式ドキュメントのリンクは、このサイトはまた、アンドロイドについて説明し

https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html

です:エントリ属性。

http://androidride.com/easiest-way-make-listview-android/

関連する問題