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 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覆盖您喜欢的任何方法,并实现特殊方法