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" /> 

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

正如在其他答案中正确解释,没有一个属性来填充从XML的RecyclerView。 但是使用Android数据绑定,你可以很容易地创build一个类似的属性:

 <?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没有这种直接可用的属性。 您必须使用LayoutManagerRecyclerView.Adapter编程方式从java代码执行此操作。 参考这个答案 。

原因:我们知道, RecyclerView不会膨胀,直到我们设置一个LayoutManager 。 此外, LayoutManagerRecyclerView单个项目视图。 这些单独的项目视图是从RecyclerView.Adapter中检索的。 因此,直到您将LayoutManagerRecyclerView.Adapter都设置为RecyclerView ,您将无法使用RecyclerView

我希望这个答案可以帮助你。

恐怕这是不可能的,您可以扩展RecyclerView并定义您自己的定制属性,它接受一个string数组,然后您将填充您的RecyclerView适配器与这些值。

检查这个链接: http : //developer.android.com/training/custom-views/create-view.html#customattr