Android MVVM再升級 DataBinding+Retrofit+RxJava+ViewModel+LiveData(三)

本文主要使用泛型優化項目結構,只對關鍵修改部分進行說明,如果不瞭解項目結構請看我的上兩篇博客:

Android MVVM改進版 DataBinding+Retrofit+RxJava+ViewModel+LiveData(二)

Android MVVM基礎版 DataBinding+Retrofit+RxJava(一)

一、修改BaseActivity 

public abstract class BaseActivity<VM extends AndroidViewModel, DB extends ViewDataBinding> extends AppCompatActivity {
    private String TAG = "";
    protected boolean isActive;
    private WaitingAlertDialog waitDialog;

    protected VM viewModel;
    protected DB dataBinding;


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        dataBinding = DataBindingUtil.setContentView(this,getLayoutId());

        Class<VM> viewModelClass = ClassUtil.getViewModel(this);
        if (viewModelClass != null) {
            viewModel = ViewModelProviders.of(this).get(viewModelClass);
        }
        initViews(savedInstanceState);
    }

    public abstract int getLayoutId();

    /**
     * 初始化views
     *
     * @param savedInstanceState
     */
    public abstract void initViews(Bundle savedInstanceState);


}

添加兩個泛型, VM和DB 分別繼承AndroidViewModel和ViewDataBinding,添加getLayoutId()方法獲取佈局id,initViews(Bundle savedInstanceState)方法一般在這裏進行一些初始化佈局操作

二、修改MainActivity

public class MainActivity extends BaseActivity<MainViewModel, ActivityMainBinding> {
    private LinearLayoutManager layoutManager;
    private MainAdapter adapter;

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

    @Override
    public int getLayoutId() {
        return R.layout.activity_main;
    }

    @Override
    public void initViews(Bundle savedInstanceState) {
        layoutManager = new LinearLayoutManager(this);
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        dataBinding.recyclerView.setLayoutManager(layoutManager);
        adapter = new MainAdapter(this);
        dataBinding.recyclerView.setAdapter(adapter);
        showWaitDialog();//顯示加載動畫
        viewModel.getList().observe(this, new Observer<BaseBean<List<PublicNumberBean>>>() {
            @Override
            public void onChanged(@Nullable BaseBean<List<PublicNumberBean>> listBaseBean) {
                if (listBaseBean.getErrorCode() == 0) {
                    dismissWaitDialog();//關閉加載圖
                    adapter.setData(listBaseBean.getData());
                }

            }
        });
    }

}

MainActivity集成BaseActivity傳入自己ViewModel和DataBInding,然後可以直接使用它們的對象。

三、總結

寫的東西很簡單,大神可以直接看我的第一篇博客開頭寫的幾個鏈接的github項目都比較好

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章