Подтвердить что ты не робот

Android: записи в recyclerview

Я использовал 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" />

Я хочу знать, есть ли атрибут android:entries в RecyclerView? Или любой другой атрибут вместо записей?

4b9b3361

Ответ 1

Как правильно объяснено в других ответах, нет атрибута для заполнения RecyclerView из xml. Однако, используя привязку данных к Android, вы можете легко создать аналогичный атрибут:

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

Ответ 2

Нет. В RecyclerView нет такого прямого доступного атрибута.. Вы должны сделать это с java-кода программно, используя LayoutManager и RecyclerView.Adapter. Отправьте этот ответ.

ПРИЧИНА: Как известно, RecyclerView не будет раздуваться, пока мы не установим ему LayoutManager. Кроме того, LayoutManager необходимо раздуть отдельные представления элементов RecyclerView. Эти отдельные представления элементов извлекаются из RecyclerView.Adapter. Таким образом, пока вы не установите LayoutManager и RecyclerView.Adapter на RecyclerView, вы не сможете использовать RecyclerView.

Надеюсь, этот ответ поможет вам.

Ответ 3

Я боюсь, что это невозможно из коробки, вы можете расширить RecyclerView и определить свой собственный настраиваемый атрибут, который принимает строковый массив, тогда вы будете заполнять свой RecyclerView Adapter этими значениями.

Проверьте эту ссылку: http://developer.android.com/training/custom-views/create-view.html#customattr