以下のようなエントリ属性でlistview
を使用しました:
<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" />
RecyclerView
にAndroid:entries
属性があるかどうか知りたいですか?または、エントリの代わりに他の属性はありますか?
他の回答で正しく説明されているように、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();
}
これはそのままでは不可能です。RecyclerViewを拡張して、文字列配列を受け入れる独自のカスタム属性を定義してから、RecyclerViewアダプタにこれらの値を入力します。
このリンクを確認してください: http://developer.Android.com/training/custom-views/create-view.html#customattr
いいえ。
RecyclerView
にはそのような直接利用可能な属性はありません。LayoutManager
を使用してプログラムでJavaコードからRecyclerView.Adapter
。 この回答を参照 。
理由:ご存知のように、RecyclerView
を設定するまで、LayoutManager
は膨張しません。また、LayoutManager
の個々のアイテムビューを膨らませるには、RecyclerView
が必要です。これらの個々のアイテムビューは、RecyclerView.Adapter
から取得されます。したがって、LayoutManager
とRecyclerView.Adapter
の両方をRecyclerView
に設定するまで、RecyclerView
を使用することはできません。
この回答がお役に立てば幸いです。