mvvm戦闘をカプセル化する

この記事は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

おすすめ

転載: www.cnblogs.com/lsx6420/p/12706869.html