做了一年半python然后在着手android发现改动很多,也忘记了很多,当做记录吧,以后方便使用,
废话不多说了,开始搞。
本次描述适用最新,andorid4.1.1版本。
首先在build.gradle添加依赖:(用的不是最新的,目前我用的)
implementation 'androidx.recyclerview:recyclerview:1.1.0'
然后书写BaesAdapter:(个人书写,只为我自己提供方便,根据个人使用自己修改哈)
public abstract class BaseAdapter<D> extends RecyclerView.Adapter{
protected List<D> mDatas;
private OnItemClickListener onItemClickListener;
private OnItemLongClickListener onItemLongClickListener;
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
public void setOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener){
this.onItemLongClickListener = onItemLongClickListener;
}
public BaseAdapter(List<D> datas) {
if (mDatas == null) {
mDatas = new ArrayList<>();
}
mDatas = datas;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return BaseViewHolder.get(parent, getResourceLayout());
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
final D data = mDatas.get(position);
BaseViewHolder baseViewHolder=(BaseViewHolder)holder;
((BaseViewHolder) holder).getItemView().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (onItemClickListener != null) {
onItemClickListener.onItemClick(view, data, position);
}
}
});
((BaseViewHolder) holder).getItemView().setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
if (onItemLongClickListener != null) {
onItemLongClickListener.onItemLongClick(view, data, position);
}
return false;
}
});
convert(baseViewHolder, data, position);
}
@Override
public int getItemCount() {
return mDatas.size();
}
public void addData(List<D> datas) {
if (datas != null) {
mDatas.addAll(datas);
}
notifyDataSetChanged();
}
public void setData(List<D> datas) {
if (datas != null) {
mDatas = datas;
}
notifyDataSetChanged();
}
public List<D> getDatas() {
return mDatas;
}
public abstract void convert(BaseViewHolder holder, D data, int position);
public abstract int getResourceLayout();
protected static class BaseViewHolder extends RecyclerView.ViewHolder {
private View mItemView;
private SparseArray<View> mViews;
private static Context mContext;
public BaseViewHolder(View itemView) {
super(itemView);
this.mItemView = itemView;
mViews = new SparseArray<>();
}
public static BaseViewHolder get(ViewGroup parent, int resourceId) {
mContext = parent.getContext();
View mItemView = LayoutInflater.from(parent.getContext()).inflate(resourceId, parent, false);
return new BaseViewHolder(mItemView);
}
public View getItemView() {
return mItemView;
}
public <T extends View> T getView(int id) {
View view = mViews.get(id);
if (view == null) {
view = mItemView.findViewById(id);
mViews.put(id, view);
}
return (T) view;
}
public void setText(int id, String value) {
((TextView) getView(id)).setText(value);
}
public void setTextColor(int id, int color){
((TextView) getView(id)).setTextColor(color);
}
public void setOnClickListener(int id, View.OnClickListener listener){
if(listener == null){
return;
}
getView(id).setOnClickListener(listener);
}
public void setImageSource(int id, int value) {
((ImageView) getView(id)).setImageResource(value);
}
public void setImageUrl(int id, String value) {
Glide.with(mContext).load(value)
// .asBitmap()
// .error(R.mipmap.ic_launcher)
// .dontAnimate()//防止设置placeholder导致第一次不显示网络图片,只显示默认图片的问题
// .placeholder(R.mipmap.ic_launcher)
.into((ImageView) getView(id));
}
public void setImageUrl(int id, String value, int width, int height){
Glide.with(mContext).load(value)
// .asBitmap()
// .override(width, height)
// .error(R.mipmap.ic_launcher)
// .dontAnimate()//防止设置placeholder导致第一次不显示网络图片,只显示默认图片的问题
// .placeholder(R.mipmap.ic_launcher)
.into((ImageView) getView(id));
}
public void setRoundImage(int id, String value) {
Glide.with(mContext).load(value)
// .asBitmap()
// .dontAnimate()//防止设置placeholder导致第一次不显示网络图片,只显示默认图片的问题
// .error(R.mipmap.ic_launcher)
// .placeholder(R.mipmap.ic_launcher)
.into((ImageView) getView(id));
}
public void setPhotoRoundImage(int id, String value) {
Glide.with(mContext).load(value)
// .asBitmap()
// .error(R.mipmap.ic_launcher)
// .dontAnimate()//防止设置placeholder导致第一次不显示网络图片,只显示默认图片的问题
.into((ImageView) getView(id));
}
}
public interface OnItemClickListener<D> {
void onItemClick(View view, D data, int position);
}
public interface OnItemLongClickListener<D>{
void onItemLongClick(View view, D data, int position);
}
}
加载图片用的是Glide继续build.gradle添加依赖,用的也不是最新的:
implementation 'com.github.bumptech.glide:glide:4.11.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
直接实战加载使用:
public class PageActivityAdapter extends BaseAdapter<Bean> {
private Context context;
public PageActivityAdapter(List<Bean> datas, Context context) {
super(datas);
this.context = context;
}
@Override
public void convert(BaseViewHolder holder, Bean data, int position) {
//设置控件
holder.setText(R.id.控件的id名字,data);
//item的点击事件,(还有长按方法一样调用)
setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(View view, Object data, int position) {
if(position==0){
Intent instant1 = new Intent(context, Shipment.class);
context.startActivity(instant1);
}else if(position==1){
Intent instant1 = new Intent(context, ShipUnloading.class);
context.startActivity(instant1);
}
}
});
}
@Override
public int getResourceLayout() {
return R.layout.自己的自定义布局;
}
}
然后在activity或者使用的页面写入:
//创建适配器对象
PageActivityAdapter pageActivityAdapter = new PageActivityAdapter(namelist,this);
//创建布局样式 我这里用的是表格布局,看自己需求(线性瀑布流等。)
GridLayoutManager linearLayoutManager = new GridLayoutManager(this,3);
//设置布局样式
pageList.setLayoutManager(linearLayoutManager);
//设置适配器
pageList.setAdapter(pageActivityAdapter);
好了这次就到这里了,原创希望对大家有所帮助。