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);
网友评论