美文网首页
Android中的基类

Android中的基类

作者: MorningandSun | 来源:发表于2020-06-23 17:35 被阅读0次

1.BaseActivity

public abstract class BaseActivity<DB extends ViewDataBinding , VM extends BaseVM> extends AppCompatActivity {
    private ACache aCache;
    private VM vm;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if(Build.VERSION.SDK_INT< Build.VERSION_CODES.M){
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        }
        if(isLight()){
            StatusBarUtil.setLightMode(this);
            StatusBarUtil.setColor(this, this.getResources().getColor(R.color.colorPrimary),0);
        }else{
            StatusBarUtil.setTranslucentForImageViewInFragment(this,0, null);
        }

        DB db = DataBindingUtil.setContentView(this, getLayout());
        aCache=ACache.get(this);
        if (vm == null) {
            Class modelClass;
            Type type = getClass().getGenericSuperclass();
            if (type instanceof ParameterizedType) {
                modelClass = (Class) ((ParameterizedType) type).getActualTypeArguments()[1];
            } else {
                //如果没有指定泛型参数,则默认使用BaseViewModel
                modelClass = BaseVM.class;
            }
            vm = (VM) ViewModelProviders.of(this).get(modelClass);
        }
        getLifecycle().addObserver(vm);
        initView(db);
        setVM(vm);
        setListener();
        initData();
    }
    public abstract int getLayout();
    public abstract boolean isLight();
    protected abstract void initView(DB bindView);
    protected abstract void setVM(VM vm);
    protected abstract void setListener();
    protected abstract void initData();


    public Context getContext(){
        return BaseActivity.this;
    }
    @Override
    protected void onRestart() {
        super.onRestart();
    }

    public ACache getACache(){
       return aCache;
    }
    
}

2.BaseFrament

public abstract class BaseFragment<DB extends ViewDataBinding, VM extends BaseVM> extends Fragment {
    private Gloading.Holder holder;
    private Context mContext;
    private VM vm;
    private ACache aCache;
    private boolean isFirstLoad = true;
    private boolean needRefresh =false;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        DB db = DataBindingUtil.inflate(LayoutInflater.from(getContext()), getContentViewId(), container, false);
        db.setLifecycleOwner(this);
        this.mContext = getActivity();
        holder = Gloading.getDefault().wrap(getActivity()).withRetry(new Runnable() {
            @Override
            public void run() {
                onLoadRetry();
            }
        });
        aCache = ACache.get(mContext);
        if (vm == null) {
            Class modelClass;
            Type type = getClass().getGenericSuperclass();
            if (type instanceof ParameterizedType) {
                modelClass = (Class) ((ParameterizedType) type).getActualTypeArguments()[1];
            } else {
                //如果没有指定泛型参数,则默认使用BaseViewModel
                modelClass = BaseVM.class;
            }
            vm = (VM) new ViewModelProvider(this).get(modelClass);
        }
        getLifecycle().addObserver(vm);
        initView(db);
        SetVM(vm);
        setOnClick();
        initData();
        needRefresh=getNeedRefresh();
        return db.getRoot();
    }

    protected abstract int getContentViewId();

    protected abstract void initView(DB bindView);

    protected abstract void SetVM(VM vm);

    protected abstract void setOnClick();

    protected abstract void initData();

    protected abstract  boolean getNeedRefresh();

    public Context getMContext() {
        return mContext;
    }

    public void onLoadRetry() {
    }


    public  void LazyLoad(){

    }
    public  void  Refresh(){

    }

    public Gloading.Holder getHolder() {
        return holder;
    }

    public void showLoading() {
        holder.showLoading();
    }

    public void showLoadSuccess() {
        holder.showLoadSuccess();
    }

    public ACache getACache() {
        return aCache;
    }

    @Override
    public void onResume() {
        super.onResume();
        if (isFirstLoad) {
            isFirstLoad = false;
            if(needRefresh){
                Refresh();
            }
            LazyLoad();
        }else{
            if(needRefresh){
                Refresh();
            }
        }

    }
}

3.BaseVM(viewmodel 基类)

public class BaseVM extends AndroidViewModel implements IModelView {
   public ACache aCache;

    public BaseVM(@NonNull Application application) {
        super(application);
     aCache=ACache.get(application);
    }

    @Override
    public void onAny(LifecycleOwner owner, Lifecycle.Event event) {

    }

    @Override
    public void onCreate() {

    }

    @Override
    public void onDestroy() {

    }

    @Override
    public void onStart() {

    }

    @Override
    public void onStop() {

    }

    @Override
    public void onResume() {

    }

    @Override
    public void onPause() {

    }

    public ACache getaCache(){
        return aCache;
    }
}


public interface IModelView extends LifecycleObserver{

    @OnLifecycleEvent(Lifecycle.Event.ON_ANY)
    void onAny(LifecycleOwner owner, Lifecycle.Event event);

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    void onCreate();

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    void onDestroy();

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    void onStart();

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    void onStop();

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    void onResume();

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    void onPause();


}


4.BaseAdapter(recycleview+databinding+vm)

public class BaseAdapter<T> extends RecyclerView.Adapter<BindingViewHolder> {
    private Context context;
    private List<T> list;
    private int layoutId;//单布局
    private int variableId;
    private OnItemClick onItemClick;
    public BaseAdapter(Context context, List<T> list, int layoutId, int variableId) {
        this.context = context;
        this.list = list;
        this.layoutId = layoutId;
        this.variableId = variableId;
    }

    @NonNull
    @Override
    public BindingViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return  new BindingViewHolder(DataBindingUtil.inflate(LayoutInflater.from(context), layoutId, parent, false));
    }

    @Override
    public void onBindViewHolder(@NonNull BindingViewHolder holder, final int position) {
        ViewDataBinding binding = holder.getBinding();
        binding.setVariable(variableId,list.get(position));
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(onItemClick!=null){
                    onItemClick.OnItemClickListener(position);
                }
            }
        });
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

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

    //ItemView 的点击接口
    public interface OnItemClick{
        void OnItemClickListener(int pos);
    }
    public void setOnItemClick(OnItemClick click){
        this.onItemClick=click;
    }
}
5.BindingViewHolder
  public class BindingViewHolder <T extends ViewDataBinding> extends RecyclerView.ViewHolder {
    private T mBinding;
    public BindingViewHolder(@NonNull T binding) {
        super(binding.getRoot());
        mBinding = binding;
    }
    public T getBinding() {
        return mBinding;
    }
}
6.ImageViewAttrAdapter (databinding 显示图片 使用了glide)

@BindingAdapter("android:src")
    public static void setSrc(ImageView view, Bitmap bitmap) {
        view.setImageBitmap(bitmap);
    }

    @BindingAdapter("android:src")
    public static void setSrc(ImageView view, int resId) {
        view.setImageResource(resId);
    }

    @BindingAdapter({"imageCilcleUrl"})
    public static void loadImage(ImageView imageView, String url) {
        RequestOptions requestOptions = new RequestOptions().transform(new GildeCilcleImageUtils());
        Glide.with(imageView.getContext())
                .load(url)
                .apply(requestOptions)
                .into(imageView);
    }
    @BindingAdapter({"imageUrl"})
    public static void loadImage1(ImageView imageView, String url) {
        Glide.with(imageView.getContext())
                .load(url)
                .into(imageView);
    }
使用:
 BaseAdapter<Bang_Music_list.MusicListBean> beanBaseAdapter=new BaseAdapter<>(getBaseContext(),listBaseRespon.getData().getMusicList(),R.layout.music_item_apt, BR.bangMusicList);

相关文章

网友评论

      本文标题:Android中的基类

      本文链接:https://www.haomeiwen.com/subject/rqwhfktx.html