2017-07-16 54 views
0

,所以我希望通过创建一个名为SearchableModel抽象类,它看起来像这是聪明的:使用抽象类作为RecyclerView适配器的基础?

public abstract class SearchableModel { 

    public abstract String getId(); 

    public abstract String getName(); 
} 

,然后创建一个RecyclerViewAdapter会延长这一抽象的任何一类的工作。我的具体类看起来是这样的:

public class School extends SearchableModel{ 

    @SerializedName("external_school_id") 
    private String id; 

    @SerializedName("name") 
    private String name; 

    @Override 
    public String getId() { 
     return id; 
    } 

    @Override 
    public String getName() { 
     return id; 
    } 
} 

而且RecyclerViewAdapter是这样的:

public class SearchableItemAdapter extends RecyclerView.Adapter<SearchableItemAdapter.ViewHolder> { 

    private List<SearchableModel> items; 

    public SearchableItemAdapter(List<SearchableModel> items) { 
     this.items = items; 
    } 

    @Override 
    public SearchableItemAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list, parent); 
     return new ViewHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(SearchableItemAdapter.ViewHolder holder, int position) { 
     SearchableModel item = items.get(position); 
     holder.nameText.setText(item.getName()); 
    } 

    @Override 
    public int getItemCount() { 
     return items.size(); 
    } 

    public static class ViewHolder extends RecyclerView.ViewHolder{ 

     @BindView(R.id.text_list_name) 
     TextView nameText; 

     public ViewHolder(View itemView) { 
      super(itemView); 
      ButterKnife.bind(this, itemView); 
     } 
    } 
} 

我的想法是,我只想能够定义一个List<School> schools,然后将其应用到该适配器构造函数使用new SearchableItemAdapter(schools)。然而,当我尝试这个,我得到以下错误:

Incompatible Types. Required List<SearchableModel>. Found List<School>

我的理解是,因为学校延伸SearchableModel它应该能够代替它被使用。我完全脱离Java中的继承方式,还是有其他事情在这里发生?

回答