本文主要使用泛型優化項目結構,只對關鍵修改部分進行說明,如果不瞭解項目結構請看我的上兩篇博客:
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項目都比較好