Android从中创建自定义RecyclerView.Adapter并创建其他类
好吧,我有一个RecyclerView,我从WebService填充,我有一个DataProvider类来管理异步请求。 因此,当获取数据时,我需要此DataProvider通知RecyclerView.Adapter有新数据。 为此,我需要向RecyclerView.Adapter添加一个允许此通信的方法。 但是当我用这个新方法创建一个基类(扩展了RecyclerView.Adapter),然后创建自定义适配器时,它不会让我覆盖RecyclerView.Adapter方法。 我究竟做错了什么?
这是基类
public abstract class BaseRecyclerAdapter extends RecyclerView.Adapter{ public static class ViewHolder extends RecyclerView.ViewHolder{ public ViewHolder (View v){ super(v); } } public BaseRecyclerAdapter(RecyclerView rv){ } public void setDataSet( String data) { //This is the method i need to add } }
这是扩展BaseRecyclerAdapter的自定义适配器
public class PlacesAdapter extends BaseRecyclerAdapter { public static class ViewHolder extends RecyclerView.ViewHolder{ public TextView mTextView; public ViewHolder(View v){ super(v); mTextView= (TextView) v.findViewById(R.id.info_text); } } public PlacesAdapter(RecyclerView recyclerView){ super(recyclerView); } @Override public int getItemCount() { return 0; } @Override public void setDataSet( String data) { } @Override public void onBindViewHolder(ViewHolder holder, int position) { //This says Method does not override method from its suplerclass } }
我想这与类型参数有关,但我无法弄清楚发生了什么
看看Pascal Welsch
这个要点:
当我第一次开始在ListView
使用RecyclerView
时,这对我有所帮助。
import android.support.v7.widget.RecyclerView; import java.util.Collections; import java.util.Comparator; import java.util.List; /** * Created by pascalwelsch on 04.07.14. */ public abstract class ArrayAdapter extends RecyclerView.Adapter { private List mObjects; public ArrayAdapter(final List objects) { mObjects = objects; } /** * Adds the specified object at the end of the array. * * @param object The object to add at the end of the array. */ public void add(final T object) { mObjects.add(object); notifyItemInserted(getItemCount() - 1); } /** * Remove all elements from the list. */ public void clear() { final int size = getItemCount(); mObjects.clear(); notifyItemRangeRemoved(0, size); } @Override public int getItemCount() { return mObjects.size(); } public T getItem(final int position) { return mObjects.get(position); } public long getItemId(final int position) { return position; } /** * Returns the position of the specified item in the array. * * @param item The item to retrieve the position of. * @return The position of the specified item. */ public int getPosition(final T item) { return mObjects.indexOf(item); } /** * Inserts the specified object at the specified index in the array. * * @param object The object to insert into the array. * @param index The index at which the object must be inserted. */ public void insert(final T object, int index) { mObjects.add(index, object); notifyItemInserted(index); } /** * Removes the specified object from the array. * * @param object The object to remove. */ public void remove(T object) { final int position = getPosition(object); mObjects.remove(object); notifyItemRemoved(position); } /** * Sorts the content of this adapter using the specified comparator. * * @param comparator The comparator used to sort the objects contained in this adapter. */ public void sort(Comparator super T> comparator) { Collections.sort(mObjects, comparator); notifyItemRangeChanged(0, getItemCount()); } }
资料来源: https : //gist.github.com/passsy/f8eecc97c37e3de46176
谢谢Jared这对我帮助很大
所以最后BaseRecyclerAdapter看起来像这样:
public abstract class BaseRecyclerAdapter extends RecyclerView.Adapter { public static class VH extends RecyclerView.ViewHolder{ public VH (View v){ super(v); } } public BaseRecyclerAdapter(RecyclerView rv){ } public void setDataSet( String data) { //this is the special method added } }
现在,您可以从RecyclerView.Adapter覆盖您喜欢的任何方法,并实现特殊方法
- httpClient.execute中的ClientProtocolException(httpget,responseHandler)
- 使用屏幕驱动程序注入触摸事件
- Jackson – 使用loadDataFromNetwork()方法使用Robospice读取JSON数组
- 单击属于RecyclerView内的CardView的ImageButton
- 将hex答案转换为十二月?
- 错误:CreateProcess error = 216,此版本的%1
- 如何在Android应用程序的单个数据库中创建两个表?
- Android 4.4.2仅在完整Java代码动画期间在视图对象边界外创建黑色蒙版
- 将Mongo DB与Android应用程序连接