Android 适配器

listview是单列的,gridview是多列的,recycleview是多列的,可垂直可水平,平时多用recycleview,因为这个很实用

适配器分多类型和单类型的,比如说加载没有图片的item,加载一个图片的item,加载两个图片的item,加载三个图片的item

这个就是recycleview的多类型

DynamicMoreTypeAdapter

package com.meetdilse.store.ui.adapter;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import com.meetdilse.store.R;
import com.meetdilse.store.data.Dynamic;
import com.meetdilse.store.glide.CircleCropTransform;
import com.meetdilse.store.glide.RoundedCornersTransform;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import static com.meetdilse.store.BaseApplication.getContext;

public class DynamicMoreTypeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {//继承于RecyclerView,还要写RecyclerView.ViewHolder

    private static final int THREE_IMAGE = 3;
    private static final int TWO_IMAGE = 2;
    private static final int ONE_IMAGE = 1;
    private static final int NO_IMAGE = 0;
    private Context mContext;
    private List<Dynamic> mData;


    public DynamicMoreTypeAdapter(Context mContext) {//构造函数,给类被调用时,该方法就会被调用
        this.mContext = mContext;//传context进来,activity的context就是对应的那个界面
        mData = new ArrayList<>();//初始化mData,用来保存从activity那边传来的数据的
    }

    public void addAll(List<Dynamic> list) {//添加多个数据的方法
        mData.addAll(list);//调用方法后就会添加数据到mData
        notifyDataSetChanged();//刷新
    }

   static class TestHolder0 extends RecyclerView.ViewHolder {//这里专门用来findviewbyid的,继承于这个holder,就可以自动添加这部分代码,要用static

       TextView name;
       ImageView avater;
       TextView dyAge;
       TextView dyPlace;
       TextView dyTitle;
       ImageView dyPhoto;
       ImageView dyPhoto2;
       TextView dyAddTime;

        public TestHolder0(@NonNull View itemView) {//总共四个holder,对应四个类型
            super(itemView);
            name = itemView.findViewById(R.id.tv_dy_name);
            avater = itemView.findViewById(R.id.iv_dy_avater);
            dyAge = itemView.findViewById(R.id.tv_dy_age);
            dyPlace = itemView.findViewById(R.id.tv_dy_place);
            dyTitle = itemView.findViewById(R.id.tv_dy_write);
            dyPhoto = itemView.findViewById(R.id.iv_dy);
            dyPhoto2 = itemView.findViewById(R.id.iv_dy2);
            dyAddTime = itemView.findViewById(R.id.tv_time);
        }
    }

    static   class TestHolder1 extends RecyclerView.ViewHolder {
        TextView name;
        ImageView avater;
        TextView dyAge;
        TextView dyPlace;
        TextView dyTitle;
        ImageView dyPhoto;
        ImageView dyPhoto2;
        TextView dyAddTime;

        public TestHolder1(@NonNull View itemView) {
            super(itemView);
            name = itemView.findViewById(R.id.tv_dy_name);
            avater = itemView.findViewById(R.id.iv_dy_avater);
            dyAge = itemView.findViewById(R.id.tv_dy_age);
            dyPlace = itemView.findViewById(R.id.tv_dy_place);
            dyTitle = itemView.findViewById(R.id.tv_dy_write);
            dyPhoto = itemView.findViewById(R.id.iv_dy);
            dyPhoto2 = itemView.findViewById(R.id.iv_dy2);
            dyAddTime = itemView.findViewById(R.id.tv_time);
        }
    }

    static  class TestHolder2 extends RecyclerView.ViewHolder {
        TextView name;
        ImageView avater;
        TextView dyAge;
        TextView dyPlace;
        TextView dyTitle;
        ImageView dyPhoto;
        ImageView dyPhoto2;
        TextView dyAddTime;

        public TestHolder2(@NonNull View itemView) {
            super(itemView);
            name = itemView.findViewById(R.id.tv_dy_name);
            avater = itemView.findViewById(R.id.iv_dy_avater);
            dyAge = itemView.findViewById(R.id.tv_dy_age);
            dyPlace = itemView.findViewById(R.id.tv_dy_place);
            dyTitle = itemView.findViewById(R.id.tv_dy_write);
            dyPhoto = itemView.findViewById(R.id.iv_dy);
            dyPhoto2 = itemView.findViewById(R.id.iv_dy2);
            dyAddTime = itemView.findViewById(R.id.tv_time);
        }
    }

    static class TestHolder3 extends RecyclerView.ViewHolder {
        TextView name;
        ImageView avater;
        TextView dyAge;
        TextView dyPlace;
        TextView dyTitle;
        ImageView dyPhoto;
        ImageView dyPhoto2;
        ImageView dyPhoto3;
        TextView dyAddTime;

        public TestHolder3(@NonNull View itemView) {
            super(itemView);
            name = itemView.findViewById(R.id.tv_dy_name);
            avater = itemView.findViewById(R.id.iv_dy_avater);
            dyAge = itemView.findViewById(R.id.tv_dy_age);
            dyPlace = itemView.findViewById(R.id.tv_dy_place);
            dyTitle = itemView.findViewById(R.id.tv_dy_write);
            dyPhoto = itemView.findViewById(R.id.iv_dy);
            dyPhoto2 = itemView.findViewById(R.id.iv_dy2);
            dyPhoto3 = itemView.findViewById(R.id.iv_dy3);
            dyAddTime = itemView.findViewById(R.id.tv_time);
        }
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        //涓嶅悓绫诲瀷杩斿洖涓嶅悓鐨勫竷灞€
        Context context = parent.getContext();//反正就是要传parent.getcontext
        if (viewType == NO_IMAGE) {//不同的类型对应不用的布局
            return new TestHolder0(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_mydynamic0, parent, false));
        }
        if (viewType == ONE_IMAGE) {
            return new TestHolder1(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_mydynamic, parent, false));
        }
        if (viewType == TWO_IMAGE) {
            return new TestHolder2(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_mydynamic2, parent, false));
        }
        if (viewType == THREE_IMAGE) {
            return new TestHolder3(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_mydynamic3, parent, false));
        }
        return new TestHolder0(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_mydynamic0, parent, false));
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {//绑定控件就是对控件添加数据
        //鍦ㄩ噷闈㈣繘琛屽搴旂被鍨嬪竷灞€鐨勬暟鎹樉绀?
        Log.v("position", String.valueOf(position));

        int itemViewType = getItemViewType(position);
        if (itemViewType == NO_IMAGE) {//娌℃湁鍥剧墖鐨勫竷灞€
            TestHolder0 holder1 = (TestHolder0) holder;
            holder1.name.setText(mData.get(position).getUserInfo().getUserNickname());
            holder1.dyPlace.setText(mData.get(position).getCity());
            holder1.dyTitle.setText(mData.get(position).getTitle());
            RoundedCornersTransform roundedCornersTransform = new RoundedCornersTransform(6);
            RequestOptions requestOptions = RequestOptions.bitmapTransform(roundedCornersTransform);

            Date day = new Date();
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String now = df.format(day);
            try {
                Date now1 = df.parse(now);
                long second = mData.get(position).getUserInfo().getBirthday();
                String dateString = secondToDate(second, "yyyy-MM-dd hh:mm:ss");
                Date birthday1 = df.parse(dateString);
                int age = now1.getYear() - birthday1.getYear();
                holder1.dyAge.setText(String.valueOf(age));

                long addTime = mData.get(position).getAddTime();
                String addTimes = secondToDate(addTime, "yyyy-MM-dd hh:mm:ss");
                String year = addTimes.substring(0, 4);
                String month = addTimes.substring(5, 7);
                String day1 = addTimes.substring(8, 10);
                holder1.dyAddTime.setText(year + "/" + month + "/" + day1);
                Log.v("addtime2", addTimes);
            } catch (ParseException e) {
                e.printStackTrace();
            }

            CircleCropTransform circleCropTransform = new CircleCropTransform();
            RequestOptions options = RequestOptions.bitmapTransform(circleCropTransform);
            Glide.with(mContext).load(mData.get(position).getUserInfo().getAvatar()).apply(options).into(holder1.avater);
        } else if (itemViewType == ONE_IMAGE) {//涓€寮犲浘鐗囩殑甯冨眬
            TestHolder1 holder2 = (TestHolder1) holder;
            holder2.name.setText(mData.get(position).getCity());
            holder2.name.setText(mData.get(position).getUserInfo().getUserNickname());
            holder2.dyPlace.setText(mData.get(position).getCity());
            holder2.dyTitle.setText(mData.get(position).getTitle());
            RoundedCornersTransform roundedCornersTransform = new RoundedCornersTransform(6);
            RequestOptions requestOptions = RequestOptions.bitmapTransform(roundedCornersTransform);

            Date day = new Date();
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String now = df.format(day);
            try {
                Date now1 = df.parse(now);
                long second = mData.get(position).getUserInfo().getBirthday();
                String dateString = secondToDate(second, "yyyy-MM-dd hh:mm:ss");
                Date birthday1 = df.parse(dateString);
                int age = now1.getYear() - birthday1.getYear();
                holder2.dyAge.setText(String.valueOf(age));

                long addTime = mData.get(position).getAddTime();
                String addTimes = secondToDate(addTime, "yyyy-MM-dd hh:mm:ss");
                String year = addTimes.substring(0, 4);
                String month = addTimes.substring(5, 7);
                String day1 = addTimes.substring(8, 10);
                holder2.dyAddTime.setText(year + "/" + month + "/" + day1);
                Log.v("addtime2", addTimes);
            } catch (ParseException e) {
                e.printStackTrace();
            }

            CircleCropTransform circleCropTransform = new CircleCropTransform();
            RequestOptions options = RequestOptions.bitmapTransform(circleCropTransform);
            Glide.with(mContext).load(mData.get(position).getUserInfo().getAvatar()).apply(options).into(holder2.avater);

            Glide.with(mContext).load(mData.get(position).getUserInfo().getAvatar()).apply(requestOptions).into(holder2.dyPhoto);
        } else if (itemViewType == TWO_IMAGE) {//涓ゅ紶鍥剧墖鐨勫竷灞€
            TestHolder2 holder3 = (TestHolder2) holder;
            holder3.name.setText(mData.get(position).getCity());
            holder3.name.setText(mData.get(position).getUserInfo().getUserNickname());
            holder3.dyPlace.setText(mData.get(position).getCity());
            holder3.dyTitle.setText(mData.get(position).getTitle());
            RoundedCornersTransform roundedCornersTransform = new RoundedCornersTransform(6);
            RequestOptions requestOptions = RequestOptions.bitmapTransform(roundedCornersTransform);

            Date day = new Date();
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String now = df.format(day);
            try {
                Date now1 = df.parse(now);
                long second = mData.get(position).getUserInfo().getBirthday();
                String dateString = secondToDate(second, "yyyy-MM-dd hh:mm:ss");
                Date birthday1 = df.parse(dateString);
                int age = now1.getYear() - birthday1.getYear();
                holder3.dyAge.setText(String.valueOf(age));

                long addTime = mData.get(position).getAddTime();
                String addTimes = secondToDate(addTime, "yyyy-MM-dd hh:mm:ss");
                String year = addTimes.substring(0, 4);
                String month = addTimes.substring(5, 7);
                String day1 = addTimes.substring(8, 10);
                holder3.dyAddTime.setText(year + "/" + month + "/" + day1);
                Log.v("addtime2", addTimes);
            } catch (ParseException e) {
                e.printStackTrace();
            }

            CircleCropTransform circleCropTransform = new CircleCropTransform();
            RequestOptions options = RequestOptions.bitmapTransform(circleCropTransform);
            Glide.with(mContext).load(mData.get(position).getUserInfo().getAvatar()).apply(options).into(holder3.avater);

            Glide.with(mContext).load(mData.get(position).getPics().get(0)).apply(requestOptions).into(holder3.dyPhoto);
            Glide.with(mContext).load(mData.get(position).getPics().get(1)).apply(requestOptions).into(holder3.dyPhoto2);
        } else if (itemViewType == THREE_IMAGE) {//涓夊紶鍥剧墖浠ヤ笂鐨勫竷灞€
            TestHolder3 holder4 = (TestHolder3) holder;
            holder4.name.setText(mData.get(position).getUserInfo().getUserNickname());
            holder4.dyPlace.setText(mData.get(position).getCity());
            holder4.dyTitle.setText(mData.get(position).getTitle());
            RoundedCornersTransform roundedCornersTransform = new RoundedCornersTransform(6);
            RequestOptions requestOptions = RequestOptions.bitmapTransform(roundedCornersTransform);

            Date day = new Date();
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String now = df.format(day);
            try {
                Date now1 = df.parse(now);
                long second = mData.get(position).getUserInfo().getBirthday();
                String dateString = secondToDate(second, "yyyy-MM-dd hh:mm:ss");
                Date birthday1 = df.parse(dateString);
                int age = now1.getYear() - birthday1.getYear();
                holder4.dyAge.setText(String.valueOf(age));

                long addTime = mData.get(position).getAddTime();
                String addTimes = secondToDate(addTime, "yyyy-MM-dd hh:mm:ss");
                String year = addTimes.substring(0, 4);
                String month = addTimes.substring(5, 7);
                String day1 = addTimes.substring(8, 10);
                holder4.dyAddTime.setText(year + "/" + month + "/" + day1);
                Log.v("addtime2", addTimes);
            } catch (ParseException e) {
                e.printStackTrace();
            }

            CircleCropTransform circleCropTransform = new CircleCropTransform();
            RequestOptions options = RequestOptions.bitmapTransform(circleCropTransform);
            Glide.with(mContext).load(mData.get(position).getUserInfo().getAvatar()).apply(options).into(holder4.avater);

            Glide.with(mContext).load(mData.get(position).getPics().get(0)).apply(requestOptions).into(holder4.dyPhoto);
            Glide.with(mContext).load(mData.get(position).getPics().get(1)).apply(requestOptions).into(holder4.dyPhoto2);
            Glide.with(mContext).load(mData.get(position).getPics().get(2)).apply(requestOptions).into(holder4.dyPhoto3);
        }
    }

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


    @Override
    public int getItemViewType(int position) {//类型,这里面放每种情况返回的类型
        //鏍规嵁鏁版嵁閲岀殑闀垮害杩斿洖鐩稿簲鐨勭被鍨?
        int pic = mData.get(position).getPics().size();//判断数据里的长度,不同的情况放回不同的类型
        if (pic == 0) {
            return NO_IMAGE;
        }
        if (pic == 1) {
            return ONE_IMAGE;
        }
        if (pic == 2) {
            return TWO_IMAGE;
        }
        if (pic >= 3) {
            return THREE_IMAGE;
        }
        return super.getItemViewType(position);
    }

    /**
     * 鏃堕棿鎴宠浆鏃ユ湡
     * @param second
     * @param patten
     * @return
     */
    private String secondToDate(long second,String patten) {

        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(second * 1000);//杞崲涓烘绉?
        Date date = calendar.getTime();
        SimpleDateFormat format = new SimpleDateFormat(patten);
        String dateString = format.format(date);
        return dateString;
    }
}

使用方法
在这里插入图片描述

这个就是recycleview的单类型

RecycleViewAdapter(没有使用到)

package com.meetdilse.store.ui.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.bumptech.glide.Glide;
import com.meetdilse.store.R;
import com.meetdilse.store.data.PersonalDetailsPhoto;

import java.util.ArrayList;
import java.util.List;

public class RecycleViewAdapter extends RecyclerView.Adapter<RecycleViewAdapter.MyHolder> {//recycleview,这个适配器只有一种类型的


    private List<PersonalDetailsPhoto> mData;
    private Context mContext;
    ImageView imageView;

    public RecycleViewAdapter(Context c) {//构造函数,给类被调用时,该方法就会被调用
        mContext = c;//传context进来,activity的context就是对应的那个界面
        mData = new ArrayList<>();//初始化mData,用来保存从activity那边传来的数据的
    }

    public void addAll(List<PersonalDetailsPhoto> list) {//添加多个数据的方法
        mData.addAll(list);//调用方法后就会添加数据到mData
        notifyDataSetChanged();//刷新
    }
    class MyHolder extends RecyclerView.ViewHolder {//holder绑定控件
        public MyHolder(View itemView) {
            super(itemView);
            imageView = itemView.findViewById(R.id.iv_person_photo);
        }
    }


    @NonNull
    @Override
    public MyHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {//创建视图,绑定布局
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_dynamic_photo, parent, false);
        MyHolder holder = new MyHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull MyHolder holder, int position) {//数据绑定控件
        PersonalDetailsPhoto dataBean = mData.get(position);
        Glide.with(mContext).load(dataBean.getThumb()).into(imageView);
    }


    @Override
    public int getItemCount() {
        return mData.size();//数据的长度
    }
}


GridView的单类型,多行两列

DiscoverAlbumAdpter

package com.meetdilse.store.ui.adapter;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.MultiTransformation;
import com.bumptech.glide.request.RequestOptions;
import com.meetdilse.store.R;
import com.meetdilse.store.data.DiscoverAlbum;
import com.meetdilse.store.glide.CircleCropTransform;
import com.meetdilse.store.glide.RoundedCornersTransform;

import java.util.ArrayList;
import java.util.List;

import jp.wasabeef.glide.transformations.BlurTransformation;


/**
 * @author ..0
 * 适配器,继承自BaseAdapter
 */
public class DiscoverAlbumAdpter extends BaseAdapter {
    private List<DiscoverAlbum> mData;
    //定义Context
    private Context mContext;


    public DiscoverAlbumAdpter(Context c) {//在构造函数里面初始化mcontext和数据,activity跟适配器关联就靠这个context了,会传界面过来的

        mContext = c;

        mData = new ArrayList<>();//初始化列表mdata,用来存activity传来的值
    }

    public void add(DiscoverAlbum e) {//添加一个值的方法
        mData.add(e);
        notifyDataSetChanged();
    }

    public void addAll(List<DiscoverAlbum> list) {//添加多个值的方法
        mData.addAll(list);//调用addall方法,将activity传过来的值赋值给mdata
        notifyDataSetChanged();//刷新
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return mData.size();//数量就是数据的个数
    }


    @Override
    public DiscoverAlbum getItem(int position) {
        // TODO Auto-generated method stub
        return mData.get(position);//获取一整个item就是数据通过position取值
    }


    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;//ID就是position
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {//这里就是绑定控件操作的地方
        // TODO Auto-generated method stub

        View view = LayoutInflater.from(mContext).inflate(R.layout.item_discover_album, parent, false);

        RoundedCornersTransform roundedCorners = new RoundedCornersTransform(6);
        RequestOptions options = RequestOptions.bitmapTransform(roundedCorners);

        CircleCropTransform roundedCorners2 = new CircleCropTransform(TypedValue.COMPLEX_UNIT_PX, 1, Color.WHITE);
        RequestOptions options2 = RequestOptions.bitmapTransform(roundedCorners2);
        DiscoverAlbum dataBean = mData.get(position);
        ImageView imageView=view.findViewById(R.id.iv_al);
        ImageView iv_pos=view.findViewById(R.id.iv_pos);
        TextView tv_pos=view.findViewById(R.id.tv_pos);
        TextView tvCoin=view.findViewById(R.id.tv_coin);
        tvCoin.setText(String.valueOf(dataBean.getCoin()));
        ImageView ivLock = view.findViewById(R.id.iv_lock);

        //设置价格
        tvCoin.setText(String.valueOf(dataBean.getCoin()));
        tvCoin.setVisibility(dataBean.getCoin() > 0 ? View.VISIBLE : View.INVISIBLE);

        //是否是否可见
        ivLock.setVisibility(dataBean.getCansee()?View.INVISIBLE:View.VISIBLE);

        Glide.with(mContext).load(dataBean.getThumb()).apply(options).into(imageView);
        Glide.with(mContext).load(dataBean.getThumb()).apply(options2).into(iv_pos);
        tv_pos.setText(dataBean.getUinfo().getUser_nickname());


        if (dataBean.getCansee()) {
            Glide.with(mContext)
                    .load(dataBean.getUinfo().getAvatar())
                    .error(new ColorDrawable(Color.parseColor("#EDEDED")))
                    .placeholder(new ColorDrawable(Color.parseColor("#EDEDED")))
                    .apply(RequestOptions.bitmapTransform(new RoundedCornersTransform(6)))
                    .into(imageView);
        } else {
            MultiTransformation<Bitmap> bitmapMultiTransformation = new MultiTransformation<>(
                    new BlurTransformation(25, 3),
                    new RoundedCornersTransform(6)
            );

            Glide.with(mContext)
                    .load(dataBean.getUinfo().getAvatar())
                    .error(new ColorDrawable(Color.parseColor("#EDEDED")))
                    .placeholder(new ColorDrawable(Color.parseColor("#EDEDED")))
                    .apply(RequestOptions.bitmapTransform(bitmapMultiTransformation))
                    .into(imageView);
        }
        return view;
    }

}

GridView的单类型,多行两列

DiscoverAlbumAdpter

package com.meetdilse.store.ui.adapter;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.MultiTransformation;
import com.bumptech.glide.request.RequestOptions;
import com.meetdilse.store.R;
import com.meetdilse.store.data.DiscoverAlbum;
import com.meetdilse.store.glide.CircleCropTransform;
import com.meetdilse.store.glide.RoundedCornersTransform;

import java.util.ArrayList;
import java.util.List;

import jp.wasabeef.glide.transformations.BlurTransformation;


/**
 * @author ..0
 * 适配器,继承自BaseAdapter
 */
public class DiscoverAlbumAdpter extends BaseAdapter {//继承于基类适配器
    private List<DiscoverAlbum> mData;
    //定义Context
    private Context mContext;


    public DiscoverAlbumAdpter(Context c) {//构造函数,给类被调用时,该方法就会被调用

        mContext = c;//传context进来,activity的context就是对应的那个界面

        mData = new ArrayList<>();//初始化mData,用来保存从activity那边传来的数据的
    }

    public void add(DiscoverAlbum e) {//添加一个数据的方法
        mData.add(e);//调用方法后就会添加数据到mData
        notifyDataSetChanged();//刷新
    }

    public void addAll(List<DiscoverAlbum> list) {//添加多个数据的方法
        mData.addAll(list);//调用方法后就会添加数据到mData
        notifyDataSetChanged();//刷新
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return mData.size();//数据的长度
    }


    @Override
    public DiscoverAlbum getItem(int position) {
        // TODO Auto-generated method stub
        return mData.get(position);//获取item的数据,从服务器返回数据中通过position获取对应位置的数据
    }


    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;//获取item的ID,那就是position了
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {//getview就是进行操作的地方
        // TODO Auto-generated method stub

        View view = LayoutInflater.from(mContext).inflate(R.layout.item_discover_album, parent, false);//像fragment那样子写

        RoundedCornersTransform roundedCorners = new RoundedCornersTransform(6);//圆角
        RequestOptions options = RequestOptions.bitmapTransform(roundedCorners);

        CircleCropTransform roundedCorners2 = new CircleCropTransform(TypedValue.COMPLEX_UNIT_PX, 1, Color.WHITE);//圆形
        RequestOptions options2 = RequestOptions.bitmapTransform(roundedCorners2);
        DiscoverAlbum dataBean = mData.get(position);//activity传进来的数据,通过position赋值给dataBean
        ImageView imageView=view.findViewById(R.id.iv_al);
        ImageView iv_pos=view.findViewById(R.id.iv_pos);
        TextView tv_pos=view.findViewById(R.id.tv_pos);
        TextView tvCoin=view.findViewById(R.id.tv_coin);
        tvCoin.setText(String.valueOf(dataBean.getCoin()));
        ImageView ivLock = view.findViewById(R.id.iv_lock);

        //设置价格
        tvCoin.setText(String.valueOf(dataBean.getCoin()));//设置文字
        tvCoin.setVisibility(dataBean.getCoin() > 0 ? View.VISIBLE : View.INVISIBLE);//设置是否可见,根据服务器给的数据,如果大于0就可见,如果不大于0,就不可见

        //是否是否可见
        ivLock.setVisibility(dataBean.getCansee()?View.INVISIBLE:View.VISIBLE);

        Glide.with(mContext).load(dataBean.getThumb()).apply(options).into(imageView);//glide显示图片
        Glide.with(mContext).load(dataBean.getThumb()).apply(options2).into(iv_pos);
        tv_pos.setText(dataBean.getUinfo().getUser_nickname());


        if (dataBean.getCansee()) {//判断服务器给的字段是0还是1,如果是1就不添加高斯模糊
            Glide.with(mContext)
                    .load(dataBean.getUinfo().getAvatar())
                    .error(new ColorDrawable(Color.parseColor("#EDEDED")))
                    .placeholder(new ColorDrawable(Color.parseColor("#EDEDED")))
                    .apply(RequestOptions.bitmapTransform(new RoundedCornersTransform(6)))
                    .into(imageView);
        } else {//否则添加高斯模糊
            MultiTransformation<Bitmap> bitmapMultiTransformation = new MultiTransformation<>(
                    new BlurTransformation(25, 3),
                    new RoundedCornersTransform(6)
            );

            Glide.with(mContext)
                    .load(dataBean.getUinfo().getAvatar())
                    .error(new ColorDrawable(Color.parseColor("#EDEDED")))
                    .placeholder(new ColorDrawable(Color.parseColor("#EDEDED")))
                    .apply(RequestOptions.bitmapTransform(bitmapMultiTransformation))
                    .into(imageView);
        }
        return view;
    }

}

使用方法
在这里插入图片描述

GridView的单类型,多行两列

DiscoverMovieAdpter

package com.meetdilse.store.ui.adapter;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.MultiTransformation;
import com.bumptech.glide.request.RequestOptions;
import com.meetdilse.store.R;
import com.meetdilse.store.data.DiscoverMovie;
import com.meetdilse.store.glide.CircleCropTransform;
import com.meetdilse.store.glide.RoundedCornersTransform;

import java.util.ArrayList;
import java.util.List;

import jp.wasabeef.glide.transformations.BlurTransformation;


/**
 * @author ..0
 * 适配器,继承自BaseAdapter
 */
public class DiscoverMovieAdpter extends BaseAdapter {
    private List<DiscoverMovie> mData;
    //定义Context
    private Context mContext;

    public DiscoverMovieAdpter() {

    }


    public DiscoverMovieAdpter(Context c) {//构造函数,给类被调用时,该方法就会被调用

        mContext = c;//传context进来,activity的context就是对应的那个界面

        mData = new ArrayList<>();//初始化mData,用来保存从activity那边传来的数据的
    }

    public void add(DiscoverMovie e) {//添加一个数据的方法//调用方法后就会添加数据到mData
        mData.add(e);//调用方法后就会添加数据到mData
        notifyDataSetChanged();//刷新
    }

    public void addAll(List<DiscoverMovie> list) {//添加多个数据的方法
        mData.addAll(list);//调用方法后就会添加数据到mData
        notifyDataSetChanged();//刷新
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return mData.size();//数据的长度
    }


    @Override
    public DiscoverMovie getItem(int position) {
        // TODO Auto-generated method stub
        return mData.get(position);//获取item的数据,从服务器返回数据中通过position获取对应位置的数据
    }


    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;//获取item的ID,那就是position了
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {//getview就是进行操作的地方
        // TODO Auto-generated method stub

        View view = LayoutInflater.from(mContext).inflate(R.layout.item_discover_movie, parent, false);
        DiscoverMovie dataBean = mData.get(position);
        ImageView imageView=view.findViewById(R.id.iv_al);
        ImageView iv_pos=view.findViewById(R.id.iv_pos);
        TextView tv_pos=view.findViewById(R.id.tv_pos);
        TextView tvCoin=view.findViewById(R.id.tv_coin);
        tvCoin.setText(String.valueOf(dataBean.getCoin()));
        ImageView ivLock = view.findViewById(R.id.iv_lock);


        CircleCropTransform roundedCorners2 = new CircleCropTransform(TypedValue.COMPLEX_UNIT_PX, 1, Color.WHITE);
        RequestOptions options2 = RequestOptions.bitmapTransform(roundedCorners2);
//        Glide.with(mContext).load(dataBean.getUinfo().getAvatar()).into(imageView);

        //设置价格
        tvCoin.setText(String.valueOf(dataBean.getCoin()));
        tvCoin.setVisibility(dataBean.getCoin() > 0 ? View.VISIBLE : View.INVISIBLE);

        //是否是否可见
        ivLock.setVisibility(dataBean.getCansee()?View.INVISIBLE:View.VISIBLE);

        Glide.with(mContext).load(dataBean.getUinfo().getAvatar()).apply(options2).into(iv_pos);
        tv_pos.setText(dataBean.getUinfo().getUserNickname());

        if (dataBean.getCansee()) {
            Glide.with(mContext)
                    .load(dataBean.getUinfo().getAvatar())
                    .error(new ColorDrawable(Color.parseColor("#EDEDED")))
                    .placeholder(new ColorDrawable(Color.parseColor("#EDEDED")))
                    .into(imageView);
        } else {
            MultiTransformation<Bitmap> bitmapMultiTransformation = new MultiTransformation<>(
                    new BlurTransformation(25, 3)
            );

            Glide.with(mContext)
                    .load(dataBean.getUinfo().getAvatar())
                    .error(new ColorDrawable(Color.parseColor("#EDEDED")))
                    .placeholder(new ColorDrawable(Color.parseColor("#EDEDED")))
                    .apply(RequestOptions.bitmapTransform(bitmapMultiTransformation))
                    .into(imageView);
        }

        return view;
    }

}

使用方法
在这里插入图片描述

这个就是recycleview的多类型(这个好像还没有实现,用开头第一个比较好)

DynamicAdapter

package com.meetdilse.store.ui.adapter;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;

import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import com.meetdilse.store.R;
import com.meetdilse.store.base.BaseNormalAdapter;
import com.meetdilse.store.base.NormalViewHolder;
import com.meetdilse.store.data.DiscoverAlbum;
import com.meetdilse.store.data.Dynamic;
import com.meetdilse.store.glide.CircleCropTransform;
import com.meetdilse.store.glide.RoundedCornersTransform;

import java.security.PublicKey;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class DynamicAdapter extends BaseNormalAdapter<Dynamic> {
    private List<Dynamic> mData;
    private Context mContext;
    private final int THREE_IMAGE=0;
    private final int TWO_IMAGE=1;
    private final int ONE_IMAGE=2;
    private final int NO_IMAGE=2;
    @Override
    public View onCreateItemView(LayoutInflater inflater, ViewGroup parent) {
        return inflater.inflate(R.layout.item_mydynamic,parent,false);
    }
    public DynamicAdapter(Context mContext){
        this.mContext=mContext;
        mData=new ArrayList<>();
    }
    public void addAll(List<Dynamic> list) {
        mData.addAll(list);
    }
    @Override
    public void onBindViewHolder(@NonNull NormalViewHolder holder, Dynamic datum, int position) {
//        if (type==2) {
            ImageView avater = holder.findViewById(R.id.iv_dy_avater);
            TextView name = holder.findViewById(R.id.tv_dy_name);
            TextView dyAge = holder.findViewById(R.id.tv_dy_age);
            TextView dyPlace = holder.findViewById(R.id.tv_dy_place);
            TextView dyTitle = holder.findViewById(R.id.tv_dy_write);
            ImageView dyPhoto = holder.findViewById(R.id.iv_dy);
            TextView dyAddTime = holder.findViewById(R.id.tv_time);

            Date day = new Date();
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String now = df.format(day);
            try {
                Date now1 = df.parse(now);
                long second = datum.getUserInfo().getBirthday();
                String dateString = secondToDate(second, "yyyy-MM-dd hh:mm:ss");
                Date birthday1 = df.parse(dateString);
                int age = now1.getYear() - birthday1.getYear();
                dyAge.setText(String.valueOf(age));

                long addTime = datum.getAddTime();
                String addTimes = secondToDate(addTime, "yyyy-MM-dd hh:mm:ss");
                String year = addTimes.substring(0, 4);
                String month = addTimes.substring(5, 7);
                String day1 = addTimes.substring(8, 10);
                dyAddTime.setText(year + "/" + month + "/" + day1);
                Log.v("addtime2", addTimes);
            } catch (ParseException e) {
                e.printStackTrace();
            }

            name.setText(datum.getUserInfo().getUserNickname());
            dyPlace.setText(datum.getCity());
            dyTitle.setText(datum.getTitle());
            RoundedCornersTransform roundedCornersTransform = new RoundedCornersTransform(6);
            RequestOptions requestOptions = RequestOptions.bitmapTransform(roundedCornersTransform);

            CircleCropTransform circleCropTransform = new CircleCropTransform();
            RequestOptions options = RequestOptions.bitmapTransform(circleCropTransform);
            Glide.with(getContext()).load(datum.getUserInfo().getAvatar()).apply(options).into(avater);
            Glide.with(getContext()).load(datum.getUserInfo().getAvatarThumb()).apply(requestOptions).into(dyPhoto);

//        }


    }
//    @Override
//    public int getItemViewType(int position) {
//        List<String> pics = mData.get(position).getPics();
//        List<String> pics1 = mData.get(position+1).getPics();
//        List<String> pics2 = mData.get(position+2).getPics();
//        List<String> pics3 = mData.get(position+3).getPics();
//        if(pics==null&&pics1==null&&pics2==null&&pics3==null){
//            return NO_IMAGE;
//        }
//        if(pics!=null&&pics1==null&&pics2==null&&pics3==null){
//            return ONE_IMAGE;
//        }
//        if(pics!=null&&pics1!=null&&pics2==null&&pics3==null){
//            return TWO_IMAGE;
//        }
//        if(pics!=null&&pics1!=null&&pics2!=null&&pics3==null){
//            return THREE_IMAGE;
//        }
//        return super.getItemViewType(position);
//    }


    /**
     * 时间戳转日期
     * @param second
     * @param patten
     * @return
     */
    private String secondToDate(long second,String patten) {

        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(second * 1000);//转换为毫秒
        Date date = calendar.getTime();
        SimpleDateFormat format = new SimpleDateFormat(patten);
        String dateString = format.format(date);
        return dateString;
    }
}

使用方法
在这里插入图片描述
在这里插入图片描述

BaseNormalAdapter(这个是自己写的还是咋样的,不晓得,反正继承于RecyclerView.Adapter)
在这里插入图片描述

package com.meetdilse.store.base;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import java.util.ArrayList;
import java.util.List;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

/**
 * 2022/01/16 23:49.
 *
 * RecyclerView适配器
 */
public abstract class BaseNormalAdapter<DATUM> extends RecyclerView.Adapter<NormalViewHolder> {

    protected final List<DATUM> mData;
    private Context mContext;

    public BaseNormalAdapter() {
        mData = new ArrayList<>();
    }

    public abstract View onCreateItemView(LayoutInflater inflater, ViewGroup parent);

    public abstract void onBindViewHolder(@NonNull NormalViewHolder holder, DATUM datum, int position);

    public Context getContext() {
        return mContext;
    }

    @Override
    public int getItemViewType(int position) {
        return super.getItemViewType(position);
    }

    @NonNull
    @Override
    public final NormalViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        if (mContext == null) {
            mContext = parent.getContext();
        }
        return new NormalViewHolder(onCreateItemView(LayoutInflater.from(parent.getContext()), parent));
    }

    @Override
    public final void onBindViewHolder(@NonNull NormalViewHolder holder, int position) {
        onBindViewHolder(holder, mData.get(position), position);
    }

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

    public List<DATUM> getData() {
        return mData;
    }

    public DATUM getDatum(int position) {
        return mData.get(position);
    }

    public void setData(List<DATUM> data) {
        mData.clear();
        mData.addAll(data);
        notifyDataSetChanged();
    }

    public void setDatum(int position, DATUM datum) {
        mData.set(position, datum);
        notifyItemChanged(position);
    }

    public void removeAll(List<DATUM> data) {
        if (data != null && mData.removeAll(data)) {
            notifyDataSetChanged();
        }
    }

    public void clear() {
        mData.clear();
        notifyDataSetChanged();
    }

    public void addData(List<DATUM> data) {
        int positionStart = mData.size();
        mData.addAll(data);
        notifyItemRangeInserted(positionStart, data.size());
    }

    public void addData(int position, List<DATUM> data) {
        mData.addAll(position, data);
        notifyItemRangeInserted(position, getItemCount() - position);
    }

    public void addDatum(DATUM datum) {
        int positionStart = mData.size();
        mData.add(datum);
        notifyItemRangeInserted(positionStart, 1);
    }

    public void addDatum(int position, DATUM datum) {
        mData.add(position, datum);
        notifyItemRangeInserted(position, 1);
        if (position < mData.size() - 1) {
            int positionStart = position + 1;
            int itemCount = getItemCount() - positionStart;
            notifyItemRangeChanged(positionStart, itemCount);
        }
    }

    public DATUM remove(int position) {
        DATUM remove = mData.remove(position);
        notifyItemRemoved(position);
        return remove;
    }

    public void remove(DATUM datum) {
        int i = mData.indexOf(datum);
        if (i >= 0) {
            remove(i);
        }
    }
}

HomeLiveAdapter(没用到)

package com.meetdilse.store.ui.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;

import com.bumptech.glide.Glide;
import com.meetdilse.store.R;
import com.meetdilse.store.data.HomeVedio;

import java.util.ArrayList;
import java.util.List;

public class HomeLiveAdapter extends BaseAdapter {

    private List<HomeVedio> mData;
    private Context mContext;


    public HomeLiveAdapter(Context c) {

        mContext = c;

        mData = new ArrayList<>();
    }

    public void addAll(List<HomeVedio> list) {
        mData.addAll(list);
        notifyDataSetChanged();
    }
    @Override
    public int getCount() {
        return mData.size();
    }

    @Override
    public HomeVedio getItem(int position) {
        // TODO Auto-generated method stub
        return mData.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.item_mydynamic, parent, false);
        HomeVedio dataBean = mData.get(position);
        ImageView imageView=view.findViewById(R.id.iv_person_vedio);
        Glide.with(mContext).load(dataBean.href).into(imageView);
        return view;
    }
}

HomeVedioAdapter(没用到)

package com.meetdilse.store.ui.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;

import com.bumptech.glide.Glide;
import com.meetdilse.store.R;
import com.meetdilse.store.data.HomeVedio;

import java.util.ArrayList;
import java.util.List;

public class HomeVedioAdapter extends BaseAdapter {

    private List<HomeVedio> mData;
    private Context mContext;


    public HomeVedioAdapter(Context c) {//构造函数,给类被调用时,该方法就会被调用

        mContext = c;//传context进来,activity的context就是对应的那个界面

        mData = new ArrayList<>();//初始化mData,用来保存从activity那边传来的数据的
    }

    public void addAll(List<HomeVedio> list) {//添加多个数据的方法
        mData.addAll(list);//调用方法后就会添加数据到mData
        notifyDataSetChanged();//刷新
    }
    @Override
    public int getCount() {
        return mData.size();//数据的长度
    }

    @Override
    public HomeVedio getItem(int position) {
        // TODO Auto-generated method stub
        return mData.get(position);//获取item的数据,从服务器返回数据中通过position获取对应位置的数据
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;//获取item的ID,那就是position了
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {//getview就是进行操作的地方
        View view = LayoutInflater.from(mContext).inflate(R.layout.item_dynamic_vedio, parent, false);
        HomeVedio dataBean = mData.get(position);
        ImageView imageView=view.findViewById(R.id.iv_person_vedio);
        Glide.with(mContext).load(dataBean.href).into(imageView);
        return view;
    }
}

GridView的多行两列

ImageAdpter

package com.meetdilse.store.ui.adapter;

import android.content.Context;
import android.graphics.Color;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import com.meetdilse.store.R;
import com.meetdilse.store.data.MeetImge;
import com.meetdilse.store.glide.CircleCropTransform;
import com.meetdilse.store.glide.RoundedCornersTransform;

import java.util.ArrayList;
import java.util.List;


/**
 * @author ..0
 * 适配器,继承自BaseAdapter
 */
public class ImageAdpter extends BaseAdapter {
    private List<MeetImge> mData;
    //定义Context
    private Context mContext;

    public ImageAdpter(Context c) {//构造函数,给类被调用时,该方法就会被调用

        mContext = c;//传context进来,activity的context就是对应的那个界面

        mData = new ArrayList<>();//初始化mData,用来保存从activity那边传来的数据的
    }

    public void add(MeetImge e) {//添加一个数据的方法
        mData.add(e);//调用方法后就会添加数据到mData
        notifyDataSetChanged();//刷新
    }

    public void addAll(List<MeetImge> list) {//添加多个数据的方法
        mData.addAll(list);//调用方法后就会添加数据到mData
        notifyDataSetChanged();//刷新
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return mData.size();//数据的长度
    }


    @Override
    public MeetImge getItem(int position) {
        // TODO Auto-generated method stub
        return mData.get(position);//获取item的数据,从服务器返回数据中通过position获取对应位置的数据
    }


    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;//获取item的ID,那就是position了
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {//getview就是进行操作的地方
        // TODO Auto-generated method stub

        View view = LayoutInflater.from(mContext).inflate(R.layout.item_meet, parent, false);
        ImageView imageView = view.findViewById(R.id.iv_bg);
        imageView.setImageResource(R.mipmap.ic_launcher);
        MeetImge dataBean = mData.get(position);

        RoundedCornersTransform roundedCorners = new RoundedCornersTransform(6);
        RequestOptions options = RequestOptions.bitmapTransform(roundedCorners);
        Glide.with(mContext).load(dataBean.getAvatar()).apply(options).into(imageView);

        CircleCropTransform roundedCorners2 = new CircleCropTransform(TypedValue.COMPLEX_UNIT_PX, 1, Color.RED);
        RequestOptions options2 = RequestOptions.bitmapTransform(roundedCorners2);
        ImageView handimage=view.findViewById(R.id.iv_avatar);
        Glide.with(mContext).load(dataBean.getThumb()).apply(options2).into(handimage);

        TextView textView = view.findViewById(R.id.tv_status);
        textView.setText(dataBean.getUserNickname());

        TextView textsite = view.findViewById(R.id.tv_pos);
        TextView textstate = view.findViewById(R.id.tv_state);

        textsite.setText(dataBean.getCity());
        return view;
    }

}

使用方法
在这里插入图片描述
在这里插入图片描述

BaseActivity

/*
 * Copyright (C) 2007 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.widget;

import android.annotation.Nullable;
import android.compat.annotation.UnsupportedAppUsage;
import android.database.DataSetObservable;
import android.database.DataSetObserver;
import android.view.View;
import android.view.ViewGroup;

/**
 * Common base class of common implementation for an {@link Adapter} that can be
 * used in both {@link ListView} (by implementing the specialized
 * {@link ListAdapter} interface) and {@link Spinner} (by implementing the
 * specialized {@link SpinnerAdapter} interface).
 */
public abstract class BaseAdapter implements ListAdapter, SpinnerAdapter {
    @UnsupportedAppUsage
    private final DataSetObservable mDataSetObservable = new DataSetObservable();
    private CharSequence[] mAutofillOptions;

    public boolean hasStableIds() {
        return false;
    }
    
    public void registerDataSetObserver(DataSetObserver observer) {
        mDataSetObservable.registerObserver(observer);
    }

    public void unregisterDataSetObserver(DataSetObserver observer) {
        mDataSetObservable.unregisterObserver(observer);
    }
    
    /**
     * Notifies the attached observers that the underlying data has been changed
     * and any View reflecting the data set should refresh itself.
     */
    public void notifyDataSetChanged() {
        mDataSetObservable.notifyChanged();
    }

    /**
     * Notifies the attached observers that the underlying data is no longer valid
     * or available. Once invoked this adapter is no longer valid and should
     * not report further data set changes.
     */
    public void notifyDataSetInvalidated() {
        mDataSetObservable.notifyInvalidated();
    }

    public boolean areAllItemsEnabled() {
        return true;
    }

    public boolean isEnabled(int position) {
        return true;
    }

    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        return getView(position, convertView, parent);
    }

    public int getItemViewType(int position) {
        return 0;
    }

    public int getViewTypeCount() {
        return 1;
    }
    
    public boolean isEmpty() {
        return getCount() == 0;
    }

    @Override
    public CharSequence[] getAutofillOptions() {
        return mAutofillOptions;
    }

    /**
     * Sets the value returned by {@link #getAutofillOptions()}
     */
    public void setAutofillOptions(@Nullable CharSequence... options) {
        mAutofillOptions = options;
    }
}

这个就是recycleview的单类型

UserInfoMovieAdapter

package com.meetdilse.store.ui.adapter;

import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.MultiTransformation;
import com.bumptech.glide.request.RequestOptions;
import com.meetdilse.store.R;
import com.meetdilse.store.base.BaseNormalAdapter;
import com.meetdilse.store.base.NormalViewHolder;
import com.meetdilse.store.data.PersonalDetailsMovie;
import com.meetdilse.store.glide.RoundedCornersTransform;

import androidx.annotation.NonNull;
import jp.wasabeef.glide.transformations.BlurTransformation;

public class UserInfoMovieAdapter extends BaseNormalAdapter<PersonalDetailsMovie> {

    @Override
    public View onCreateItemView(LayoutInflater inflater, ViewGroup parent) {
        return inflater.inflate(R.layout.item_dynamic_vedio, parent, false);
    }

    @Override
    public void onBindViewHolder(@NonNull NormalViewHolder holder, PersonalDetailsMovie datum, int position) {
        ImageView imageView = holder.findViewById(R.id.iv_person_vedio);
        TextView tvCoin=holder.findViewById(R.id.tv_coin);
        tvCoin.setText(String.valueOf(datum.getCoin()));
        ImageView ivLock = holder.findViewById(R.id.iv_lock);
        if (datum.canSee()) {
            Glide.with(getContext())
                    .load(datum.getHref())
                    .error(new ColorDrawable(Color.parseColor("#EDEDED")))
                    .placeholder(new ColorDrawable(Color.parseColor("#EDEDED")))
                    .apply(RequestOptions.bitmapTransform(new RoundedCornersTransform(6)))
                    .into(imageView);
        } else {
            MultiTransformation<Bitmap> bitmapMultiTransformation = new MultiTransformation<>(
                    new BlurTransformation(25, 3),
                    new RoundedCornersTransform(6)
            );

            Glide.with(getContext())
                    .load(datum.getHref())
                    .error(new ColorDrawable(Color.parseColor("#EDEDED")))
                    .placeholder(new ColorDrawable(Color.parseColor("#EDEDED")))
                    .apply(RequestOptions.bitmapTransform(bitmapMultiTransformation))
                    .into(imageView);
        }

        //设置价格
        tvCoin.setText(String.valueOf(datum.getCoin()));
        tvCoin.setVisibility(datum.getCoin() > 0 ? View.VISIBLE : View.INVISIBLE);

        //是否是否可见
        ivLock.setVisibility(datum.canSee()?View.INVISIBLE:View.VISIBLE);
    }
}

这个就是recycleview的单类型

UserInfoPhotoAdapter

package com.meetdilse.store.ui.adapter;

import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.MultiTransformation;
import com.bumptech.glide.request.RequestOptions;
import com.meetdilse.store.R;
import com.meetdilse.store.base.BaseNormalAdapter;
import com.meetdilse.store.base.NormalViewHolder;
import com.meetdilse.store.data.PersonalDetailsPhoto;
import com.meetdilse.store.glide.RoundedCornersTransform;

import androidx.annotation.NonNull;
import jp.wasabeef.glide.transformations.BlurTransformation;


public class UserInfoPhotoAdapter extends BaseNormalAdapter<PersonalDetailsPhoto> {

    @Override
    public int getItemViewType(int position) {
        return super.getItemViewType(position);
    }

    @Override
    public View onCreateItemView(LayoutInflater inflater, ViewGroup parent) {
        return inflater.inflate(R.layout.item_dynamic_photo, parent, false);
    }

    @Override
    public void onBindViewHolder(@NonNull NormalViewHolder holder, PersonalDetailsPhoto datum, int position) {
        ImageView imageView = holder.findViewById(R.id.iv_person_photo);
        TextView tvCoin=holder.findViewById(R.id.tv_coin);
        tvCoin.setText(String.valueOf(datum.getCoin()));
        ImageView ivLock = holder.findViewById(R.id.iv_lock);
        if (datum.canSee()) {
            Glide.with(getContext())
                    .load(datum.getThumb())
                    .error(new ColorDrawable(Color.parseColor("#EDEDED")))
                    .placeholder(new ColorDrawable(Color.parseColor("#EDEDED")))
                    .apply(RequestOptions.bitmapTransform(new RoundedCornersTransform(6)))
                    .into(imageView);
        } else {
            MultiTransformation<Bitmap> bitmapMultiTransformation = new MultiTransformation<>(
                    new BlurTransformation(25, 3),
                    new RoundedCornersTransform(6)
            );
            Glide.with(getContext())
                    .load(datum.getThumb())
                    .error(new ColorDrawable(Color.parseColor("#EDEDED")))
                    .placeholder(new ColorDrawable(Color.parseColor("#EDEDED")))
                    .apply(RequestOptions.bitmapTransform(bitmapMultiTransformation))
                    .into(imageView);
        }
        //设置价格
        tvCoin.setText(String.valueOf(datum.getCoin()));
        tvCoin.setVisibility(datum.getCoin() > 0 ? View.VISIBLE : View.INVISIBLE);

        //是否是否可见
        ivLock.setVisibility(datum.canSee()?View.INVISIBLE:View.VISIBLE);
    }
}

使用方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值