public abstract class BaseActivity<MD extends BaseViewModel> extends AppCompatActivity implements View.OnClickListener {
protected Context context;
protected MD viewModel;
protected Application app;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initBindingView();
context = this;
if (initViewModel() != null){
viewModel = (MD) new ViewModelProvider(this).get(initViewModel().getClass());
viewModel.application = app;
getLifecycle().addObserver(viewModel);
}
initView();
initData();
initListener();
ActivityListUtil.getInstance().addActivityToList(this);
}
@Override
protected void onDestroy() {
if (initViewModel() != null){
getLifecycle().removeObserver(viewModel);
}
ActivityListUtil.getInstance().removeActivityFromList(this);
super.onDestroy();
}
protected void initBindingView() {}
protected void initOnClick(View... views){
for (View view: views) {
view.setOnClickListener(this);
}
}
protected abstract MD initViewModel();
protected abstract void initView();
protected abstract void initData();
protected abstract void initListener();
protected void startActivity(Class<?> cls) {
startActivity(cls, null);
}
protected void startActivity(Class<?> cls, Bundle bundle) {
Intent intent = new Intent(context, cls);
if (bundle != null) {
intent.putExtras(bundle);
}
startActivity(intent);
}
}
dataBinding:
public abstract class BaseDataBindingActivity<DB extends ViewDataBinding, MD extends BaseViewModel> extends BaseActivity<MD> {
protected DB binding;
@Override
protected void initBindingView() {
super.initBindingView();
binding = DataBindingUtil.setContentView(this, getLayoutId());
binding.setLifecycleOwner(this);
}
@Override
protected void onDestroy() {
if (binding != null){
binding.unbind();
binding = null;
}
super.onDestroy();
}
protected abstract int getLayoutId();
}
使用:
public class MainActivity extends BaseDataBindingActivity<ActivityMain3Binding, BaseViewModel> {
@Override
protected int getLayoutId() {
return R.layout.activity_main3;
}
@Override
protected BaseViewModel initViewModel() {
return null;
}
@Override
protected void initView() {
initOnClick(binding.dAxt);
}
@Override
protected void initData() {
}
@Override
protected void initListener() {
// viewModel.getUsers().observe(this, users -> {
// Log.e("---------->", "---------");
// });
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.dAxt:
// viewModel.getData();
Toast.makeText(context, "123", Toast.LENGTH_SHORT).show();
break;
}
}
}
viewBinding:
public abstract class BaseViewBindingActivity<VB extends ViewBinding, MD extends BaseViewModel> extends BaseActivity<MD> {
protected VB binding;
@Override
protected void initBindingView() {
super.initBindingView();
binding = getViewBinding(getLayoutInflater());
setContentView(binding.getRoot());
}
@Override
protected void onDestroy() {
binding = null;
super.onDestroy();
}
protected abstract VB getViewBinding(LayoutInflater layoutInflater);
}
使用:
public class ViewActivity extends BaseViewBindingActivity<ActivityViewBinding, BaseViewModel> {
@Override
protected ActivityViewBinding getViewBinding(LayoutInflater layoutInflater) {
return ActivityViewBinding.inflate(layoutInflater);
}
@Override
protected BaseViewModel initViewModel() {
return null;
}
@Override
protected void initView() {
}
@Override
protected void initData() {
}
@Override
protected void initListener() {
}
@Override
public void onClick(View view) {
switch (view.getId()){
}
}
}
管理Activity:
public class ActivityListUtil {
private static ActivityListUtil instance;
public ArrayList<Activity> activityList;
public ActivityListUtil() {
activityList = new ArrayList<>();
}
public static ActivityListUtil getInstance() {
if (instance == null) {
instance = new ActivityListUtil();
}
return instance;
}
public void addActivityToList(Activity activity) {
if (activity != null) {
activityList.add(activity);
}
}
public void removeActivityFromList(Activity activity) {
if (activityList != null && activityList.size() > 0) {
activityList.remove(activity);
}
}
public void cleanActivityList() {
if (activityList != null && activityList.size() > 0) {
for (int i = 0; i < activityList.size(); i++) {
Activity activity = activityList.get(i);
if (activity != null && !activity.isFinishing()) {
activity.finish();
}
}
}
}
}