android:recyclerview中的条目

Rav*_*avi 37 android android-recyclerview android-databinding

我使用listview了以下条目属性:

<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:entries="@array/fi"/>
Run Code Online (Sandbox Code Playgroud)

现在我正在将其转换为 RecyclerView

<android.support.v7.widget.RecyclerView
    android:id="@+id/rv"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
Run Code Online (Sandbox Code Playgroud)

我想知道我们是否有android:entries属性RecyclerView?或者任何其他属性而不是条目?

rci*_*ati 38

正如在其他答案中正确解释的那样,没有从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>
Run Code Online (Sandbox Code Playgroud)

这里是绑定适配器定义:

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你必须使用DataBindingUtil方法来夸大布局.

在活动中膨胀:

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

在片段内膨胀:

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


Amr*_*dri 5

没有RecyclerView.没有这样的直接可用属性.你必须使用LayoutManager和以编程方式从java代码中执行此操作RecyclerView.Adapter.请参阅此答案.

原因: 我们知道,RecyclerView在我们设定之前不会膨胀LayoutManager.此外,LayoutManager有必要膨胀个别项目的观点RecyclerView.从中检索这些单独的项目视图RecyclerView.Adapter.所以,直到你同时设置LayoutManagerRecyclerView.AdapterRecyclerView,你不能使用RecyclerView.

我希望这个答案可以帮到你.


Min*_*amy 5

我担心这不可能开箱即用,你可以扩展RecyclerView并定义你自己接受字符串数组的自定义属性,然后用这些值填充你的RecyclerView Adapter.

查看此链接:http: //developer.android.com/training/custom-views/create-view.html#customattr