この記事はmvvmの基本パッケージに関するものですが、まだパッケージ化していない方はぜひご覧ください。
その前に、mvvmの
原則について説明しましょう。モデルとビューは双方向にバインドされており、viewmodelでロジックコードを記述します。
実はとてもシンプルですが、シーンによって使い分けられています。
最初にdatabingを有効にします
dataBinding {
enabled = true
}
一、基类BaseActivity。
パブリック抽象クラスBaseActivityは、AppCompatActivityがIBaseView {
private Unbinder unbinder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(initView());
unbinder = ButterKnife.bind(this);
initData();
AppManager.getInstance().pushActivity(this); //入栈
}
/**
* 获取一个 Context 对象
*/
public Context getContext() {
return getBaseContext();
}
//匿名内部类扩展性不好,没有接口好,但相对严谨 //√
public void clickListener(int[] arr, View.OnClickListener listener) {
for (int layoutId : arr) {
findViewById(layoutId).setOnClickListener(listener);
}
}
@Override //√
public void onClick(View view) {
if (!Util.getInstance().isFastClick()) {
onWidgetClick(view);
}
}
public abstract int initView();
public abstract void initData();
/**
* 跳转到其他 Activity
*/
public void startActivity(Class<? extends Activity> cls) {
startActivity(new Intent(this, cls));
}
@Override
protected void onDestroy() {
super.onDestroy();
if (unbinder != null) {
unbinder.unbind();
}
//退栈
AppManager.getInstance().popActivity(this);
}}
public interface IBaseView extends View.OnClickListener { void onWidgetClick(final View view);}
注意:点击事件需先设置监听,然后在onWidgetClick里判断
第2に、このステップのdatabingはビューモデルを接続します。
パブリック抽象クラスAbsMvvmActivity <TはAbsViewModelを拡張し、BはViewDataBindingを拡張します> BaseActivityを拡張します{
protected T mViewModel;
protected B mBinding;
public AbsMvvmActivity() {
}
//重写方法,初始化binding
@Override
public void setContentView(int layoutResID) {
mBinding = DataBindingUtil.inflate(
LayoutInflater.from(this),
layoutResID, null, false);
super.setContentView(mBinding.getRoot());
mViewModel = VMProviders(this, (Class<T>) TUtil.getInstance(this, 0));
}
protected <T extends ViewModel> T VMProviders(AppCompatActivity fragment, @NonNull Class<T> modelClass) {
return (T) ViewModelProviders.of(fragment).get(modelClass);
}}
public abstract class AbsViewModel extends AndroidViewModel {
public AbsViewModel(@NonNull Application application) {
super(application);
}}
3番目に、MainActivityで使用します。
パブリッククラスMainActivityは、AbsMvvmActivity <MainVm、ActivityMainBinding> {を拡張します。
@Override
public int initView() {
return R.layout.activity_main;
}
@Override
public void initData(){
}
@Override
public void onWidgetClick(View view) {
switch (view.getId()) {
case R.id.btn:
Log.e(TAG, "onWidgetClick: " );
break;
}
}}
パブリッククラスMainVmはAbsViewModelを拡張してLifecycleObserverを実装します{
private MutableLiveData<TestBean> mResult = new MutableLiveData<>();
public final ObservableField<String> city = new ObservableField<>();
private Lifecycle lifecycle;
public MainVm(@NonNull Application application) {
super(application);
}
public MutableLiveData<TestBean> getResultLiveData() {
return mResult;
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void ondestroy() {
lifecycle.removeObserver(this);
}}
最後に、GitHubアドレスを指定します。https://github.com/apeed/androidWorkspace/blob/master/FZMvvm.rar