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
没有这种直接可用的属性。 您必须使用LayoutManager
和RecyclerView.Adapter
编程方式从java代码执行此操作。 参考这个答案 。
原因:我们知道, RecyclerView
不会膨胀,直到我们设置一个LayoutManager
。 此外, LayoutManager
是RecyclerView
单个项目视图。 这些单独的项目视图是从RecyclerView.Adapter
中检索的。 因此,直到您将LayoutManager
和RecyclerView.Adapter
都设置为RecyclerView
,您将无法使用RecyclerView
。
我希望这个答案可以帮助你。
恐怕这是不可能的,您可以扩展RecyclerView并定义您自己的定制属性,它接受一个string数组,然后您将填充您的RecyclerView适配器与这些值。
检查这个链接: http : //developer.android.com/training/custom-views/create-view.html#customattr