Recyclerview适配器与CursorAdapter
Recyclerview适配器与CursorAdapter
我正尝试使用CursorAdapter
实现一个RecyclerView
的适配器,如下所示,这是在这里的一个解决方案中建议的方法。\n我是Android的新手,我不太清楚我应该如何重写CursorAdapter
的newView方法和bindView方法。另外,我猜测我的适配器将有多个变量在ViewHolder
中,而不是一个(View v1),因为我的布局文件中有几个textViews
,但我不知道它们如何在代码中适配。\n
public class MyRecyclerAdapter extends Adapter
问题的原因是作者想在RecyclerView的适配器中使用CursorAdapter来获取数据库中的数据,但是遇到了问题。
解决方法是使用ORM(对象关系映射)库来处理数据库操作,例如使用SugarORM。通过使用ORM库,可以更简单地处理数据库操作,而不需要使用CursorAdapter。
以下是解决方法的代码示例:
public class RecyclerViewAdapter extends RecyclerView.Adapter{ class ViewHolder extends RecyclerView.ViewHolder { TextView textView1; TextView textView2; public ViewHolder(View itemView) { super(itemView); textView1 = (TextView) itemView.findViewById(R.id.textView1); textView2 = (TextView) itemView.findViewById(R.id.textView2); } public void insertView(String result1, String result2) { textView1.setText(result1); textView2.setText(result2); } } private List results; public RecyclerViewAdapter(List results) { this.results = results; } public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_name, parent, false); RecyclerView.ViewHolder viewHolder = new ViewHolder(itemView); return viewHolder; } public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { ((ViewHolder) holder).insertView(results.get(position).getResult1(), results.get(position).getResult2()); } public int getItemCount() { return results.size(); } }
通过使用ORM库,可以在获取数据库信息后将其传递给适配器的构造函数,从而解决了使用CursorAdapter的问题。
文章的完整内容如上所示。
RecyclerView Adapter和CursorAdapter的问题出现的原因是RecyclerView.Adapter不支持直接使用Cursor对象作为数据源,需要使用CursorAdapter来实现。解决方法是将CursorAdapter作为RecyclerView Adapter的成员变量,并在适当的位置调用CursorAdapter的方法。
具体解决方法如下:
1. 将CursorAdapter作为RecyclerView Adapter的成员变量:
private CursorAdapter mCursorAdapter;
2. 在RecyclerView Adapter的构造函数中初始化CursorAdapter:
mCursorAdapter = new CursorAdapter(mContext, c, 0) {...}
3. 在RecyclerView Adapter的getItemCount()方法中返回CursorAdapter的数据源数量:
return mCursorAdapter.getCount();
4. 在RecyclerView Adapter的onBindViewHolder()方法中调用CursorAdapter的bindView()方法绑定数据:
mCursorAdapter.getCursor().moveToPosition(position); mCursorAdapter.bindView(holder.itemView, mContext, mCursorAdapter.getCursor());
5. 在RecyclerView Adapter的onCreateViewHolder()方法中调用CursorAdapter的newView()方法创建ViewHolder:
View v = mCursorAdapter.newView(mContext, mCursorAdapter.getCursor(), parent);
通过以上操作,我们成功将CursorAdapter作为RecyclerView Adapter的数据源,并实现了数据的绑定和显示。
希望以上解决方法对您有帮助。如果有其他问题,请随时提问。