【问题标题】:Extend a class from an adapter class从适配器类扩展一个类
【发布时间】:2017-03-26 11:06:45
【问题描述】:

在我的应用程序中应该有很多彼此相似的适配器,我想知道是否可以让接口或超类从那里继承,而不是写 10 个适配器,谢谢!!

我的适配器代码

public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.NewsViewHolder> {

    private List<News> newsList;
    private Context ctx;

    public NewsAdapter(List<News> newsList, Context ctx) {
        this.newsList = newsList;
        this.ctx = ctx;
    }

    static class NewsViewHolder extends RecyclerView.ViewHolder {
        CardView cv;
        TextView newsTitle;
        TextView newsDescription;
        ImageView newsImage;
        TextView newsDate;

        NewsViewHolder(View itemView) {
            super(itemView);
            cv = (CardView) itemView.findViewById(R.id.cvNews);
            newsTitle = (TextView) itemView.findViewById(R.id.title_news);
            newsDescription = (TextView) itemView.findViewById(R.id.description_news);
            newsDate = (TextView) itemView.findViewById(R.id.date_news);
            newsImage = (ImageView) itemView.findViewById(R.id.image_news);
        }
    }

    @Override
    public NewsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.news_item, parent,
                false);
        return new NewsViewHolder(v);
    }

    @Override
    public void onBindViewHolder(NewsViewHolder holder, int position) {
        holder.newsTitle.setText(newsList.get(position).newsTitle);
        holder.newsDescription.setText(newsList.get(position).newsDescription);
        holder.newsDate.setText(newsList.get(position).newsDate);
        Glide.with(ctx).load(Constants.SITE + newsList.get(position).newsImage)
                .into(holder.newsImage);
    }

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

    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
    }

}

All should reflect like this

【问题讨论】:

  • 应该是很多adapter每个都相似,相似度如何?
  • @Blackbelt 他们有类似的设计(物品)....我添加了一张图片,请看)
  • 如果您有多个看起来相同或相似的列表,您可以使用相同的适配器、相同的视图持有者和相同的 POJO 类。如果存在细微差别,您可以随时使用 if else 块来满足您的需求,而不是为每个列表创建新的适配器。
  • @MohammedAtif 我想过你写的东西,但是如果我在 VievHolder 有一个项目,我应该怎么做?写很多ViewHolders?或者别的什么?
  • 正如我所说,如果有 3 到 4 个项目的差异,请使用 if else 阻止仅使用那些需要的项目。

标签: java android interface android-recyclerview adapter


【解决方案1】:

可以使接口或超类继承自 那里然后,而不是写 10 个适配器

这是可能的,但当然必须有一些共同点。首先,数据集应该是同质的。例如。您的项目都应该实现一个接口,即项目和适配器本身之间的合同。在你的情况下,它可能是

public interface DataItem {
     String getTitle();
     String getDescription();
     String getDate();
     String getImageUrl();
}

而不是private List&lt;News&gt; newsList;,您将拥有私人List&lt;? extends DataItem&gt; newsList;。正如我所说,您的所有项目都必须实现该接口,并且必须通过 getter 访问属性

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多