我使用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
属性?或者任何其他属性而不是条目?
答案 0 :(得分: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>
这里是绑定适配器定义:
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();
}
答案 1 :(得分:5)
否。
RecyclerView
中没有这样的直接可用属性。您必须使用LayoutManager
和RecyclerView.Adapter
以编程方式从java代码执行此操作。 Refer this answer
<强>原因:强>
众所周知,RecyclerView
在我们设置LayoutManager
之前不会膨胀。此外,LayoutManager
是扩展RecyclerView
的单个项目视图所必需的。从RecyclerView.Adapter
检索这些单独的项目视图。因此,在将LayoutManager
和RecyclerView.Adapter
都设置为RecyclerView
之前,您无法使用RecyclerView
。
我希望这个答案可以帮助你。
答案 2 :(得分:5)
我担心这不可能开箱即用,你可以扩展RecyclerView并定义你自己的接受字符串数组的自定义属性,然后用这些值填充你的RecyclerView适配器。
检查此链接: http://developer.android.com/training/custom-views/create-view.html#customattr
答案 3 :(得分:0)
不,在android中,Recyclerview不包含android:条目或类似属性。 RecyclerView是listview的后继者,但仍然缺少entries属性和onclicklistener
这里是android官方文档链接
https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html
该网站还描述了android:entries属性。