一般来说,您应该尝试将视图和数据职责分开。所以,你需要的是从数据库中获取预先所有的对象,然后设置一个适配器,它看起来像以下:
final CustomAdapter adapter = new CustomAdapter();
adapter.setItems(mPersons);
mRecyclerView.setAdapter();
:
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {
private final List<Person> objectList = new ArrayList<>();
@Override
public CustomAdapter.ViewHolder onCreateViewHolder(final ViewGroup parent, final int viewType) {
final LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
return new ViewHolder(layoutInflater.inflate(R.layout.adapter_item, parent, false));
}
@Override
public void onBindViewHolder(final CustomAdapter.ViewHolder holder, final int position) {
holder.bindItem(objectList.get(position));
}
// Set the persons for your adapter
public void setItems(final List<Person> persons) {
objectList.addAll(persons);
notifyDataSetChanged();
}
@Override
public int getItemCount() {
return objectList.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
private final TextView mTextViewTitle;
private Object mObject;
public ViewHolder(final View itemView) {
super(itemView);
mTextViewTitle = (TextView) itemView.findViewById(R.id.view_item_textViewTitle);
mTextViewTitle.setText(mObject.getText());
}
private void bindItem(@NonNull final Person object) {
mObject = object;
}
}
}
然后你就可以将适配器通过绑定到RecyclerView
回答你的第二个问题(“过去,我们曾经有过listview和gridview,看起来它们现在合并成为recyclerview。那么,我该如何实现基于网格的recyclerview?”):
当绑定一个LayoutManager到RecyclerView你可以决定哪个一个你拿:
final LinearLayoutManager layoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(layoutManager);
或
final GridLayoutManager layoutManager = new GridLayoutManager(this, COLUMN_SPAN_COUNT);
mRecyclerView.setLayoutManager(layoutManager);
有几个布局管理。了解更多here。
UPDATE: 您不必装载提前的所有项目,只需重命名setItems来为addItems,你是好去
你不必使用任何列表:使用ItemBridgeAdapter + CursorObjectAdapter或直接绑定光标在你的自定义RecyclerView.Adapter – pskink
老实说,我不知道为什么CursorObjectAdapter是在“leanback”支持库,它是专为电视设备,imho它应该是任何“通用”支持库的一部分 – pskink
@pskink我现在不得不解决这个问题。请您提供一个简单的例子,说明如何在[我的]自定义RecyclerView.Adapter中直接绑定游标?这将非常有帮助。谢谢。当你这样做时,请在回复的评论中加上标签。感谢您的任何帮助,您可以提供。 –