android编程中适配器的作用,怎么在Android 中利用RecyclerView实现一个通用适配器功能...

怎么在Android 中利用RecyclerView实现一个通用适配器功能

发布时间:2020-11-30 17:47:59

来源:亿速云

阅读:130

作者:Leah

怎么在Android 中利用RecyclerView实现一个通用适配器功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

实现代码:

RViewHolderimport android.content.Context;

import android.graphics.Bitmap;

import android.support.v7.widget.RecyclerView.ViewHolder;

import android.util.SparseArray;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ImageView;

import android.widget.TextView;

public class RViewHolder extends ViewHolder {

private Context mContext;

private View mConvertView;

private SparseArray mViews;

public RViewHolder(View itemView) {

super(itemView);

mConvertView = itemView;

this.mViews = new SparseArray();

}

public static RViewHolder get(Context context, ViewGroup parent, int layoutId, int position) {

View view = LayoutInflater.from(context).inflate(layoutId, parent, false);

return new RViewHolder(view);

}

/**

* 通过控件的Id获取对于的控件,如果没有则加入views

*

* @param viewId

* @return

*/

public  T getView(int viewId) {

View view = mViews.get(viewId);

if (view == null) {

view = mConvertView.findViewById(viewId);

mViews.put(viewId, view);

}

return (T) view;

}

/**

* 为TextView设置字符�?

*

* @param viewId

* @param text

* @return

*/

public ViewHolder setText(int viewId, String text) {

TextView view = getView(viewId);

view.setText(text);

return this;

}

/**

* 为ImageView设置图片

*

* @param viewId

* @param drawableId

* @return

*/

public ViewHolder setImageResource(int viewId, int drawableId) {

ImageView view = getView(viewId);

view.setImageResource(drawableId);

return this;

}

/**

* 为ImageView设置图片

*

* @param viewId

* @param drawableId

* @return

*/

public ViewHolder setImageBitmap(int viewId, Bitmap bm) {

ImageView view = getView(viewId);

view.setImageBitmap(bm);

return this;

}

public View getConvertView() {

return mConvertView;

}

}

这里是RBaseAdapterimport java.util.ArrayList;

import java.util.Collection;

import java.util.List;

import android.content.Context;

import android.support.v7.widget.RecyclerView.Adapter;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.LinearLayout;

public abstract class RBaseAdapter extends Adapter {

private Context mContext;

private List list;

protected LayoutInflater mInflater;

private int mItemLayoutId;

public RBaseAdapter(Context context) {

// TODO Auto-generated constructor stub

this.mContext = context;

this.mInflater = LayoutInflater.from(mContext);

this.mItemLayoutId = new LinearLayout(mContext).getId();

this.list = new ArrayList();

}

public RBaseAdapter(Context context, List list) {

// TODO Auto-generated constructor stub

this.mContext = context;

this.mInflater = LayoutInflater.from(mContext);

this.mItemLayoutId = new LinearLayout(mContext).getId();

this.list = list;

}

public RBaseAdapter(Context context, List list, int itemLayoutId) {

this.mContext = context;

this.mInflater = LayoutInflater.from(mContext);

this.mItemLayoutId = itemLayoutId;

this.list = list;

}

public RBaseAdapter(Context context, int itemLayoutId) {

this.mContext = context;

this.mInflater = LayoutInflater.from(mContext);

this.mItemLayoutId = itemLayoutId;

this.list = new ArrayList();

}

public void setitemLayoutId(int itemLayoutId) {

this.mItemLayoutId = itemLayoutId;

}

public List getList() {

return this.list;

}

public void appendList(List list) {

// TODO Auto-generated method stub

this.list = list;

notifyDataSetChanged();

}

public void addList(List list2) {

// TODO Auto-generated method stub

this.list.addAll((Collection extends T>) list2);

notifyDataSetChanged();

}

@Override

public int getItemCount() {

return list.size();

}

boolean hasHeader = false;

boolean hasFooter = false;

View headerView;

View footerView;

public void setHeaderView(View headerView) {

hasHeader=true;

this.headerView = headerView;

}

public void setFooterView(View footerView) {

hasFooter = true;

this.footerView = footerView;

}

public View getHeaderView() {

return headerView;

}

public View getFooterView() {

return footerView;

}

@Override

public void onBindViewHolder(RViewHolder holder, int position) {

if (hasHeader && position == 0) {

return;

} else if (hasFooter && position == (list.size() + (hasHeader ? 1 : 0))) {

return;

} else

convert(holder, (T) list.get(position));

}

@Override

public RViewHolder onCreateViewHolder(ViewGroup parent, int position) {

if (hasHeader && position == 0) {

return new RViewHolder(headerView);

} else if (hasFooter && position == (list.size() + (hasHeader ? 1 : 0))) {

return new RViewHolder(footerView);

} else

return RViewHolder.get(mContext, parent, mItemLayoutId, position);

}

//这里定义抽象方法,我们在匿名内部类实现的时候实现此方法来调用控件

public abstract void convert(RViewHolder holder, T item);

}

对于RBaseAdapter稍微讲解下,首先是泛型,这样任何对象类型都可以使用,再来就是前面提到的headerview和footerview的解决,可以看到RBaseAdapter里面定义了几个方法,通过position的不同来加载不同的布局的思想来添加headerview和footerview。

Activity里面调用recyclerView.setAdapter(new RBaseAdapter(mContext, R.layout.virtual_win_users_list_item) {

@Override

public void convert(RViewHolder holder, VirtualWinsBean item) {

if (Util.checkNULL(item.getNick_name())) {

holder.setText(R.id.name, Util.HidePhone(item.getPhone() + ""));

} else {

holder.setText(R.id.name, item.getNick_name());

}

RoundImageView networkImageView = holder.getView(R.id.photo);

networkImageView.setLoadingImage(R.drawable.header_def);

networkImageView.setDefultImage(R.drawable.header_def);

networkImageView.LoadUrl(U.g(item.getFile_url()));

}

});

看完上述内容,你们掌握怎么在Android 中利用RecyclerView实现一个通用适配器功能的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值