我想知道我是否为我的Android应用使用了正确的体系结构,所以我想验证一下。 我做了很多阅读和教程,这些都是我在Google上找到的,并将这些知识组合到以下架构中:
此设置的基础是Android Studio中的主/详细信息流程模板。
查看
该视图是一个名为OrderListActivity
的活动,其中包含OrderListItemRecyclerViewAdapter
,它使用的是OrderListItemViewHolder
。
该视图包含类型为OrderViewModel的变量。
我的onCreate函数调用setupOrderItemListener()
,其中包含以下代码:
private void setupOrderItemListener() {
orderViewModel = ViewModelProviders.of(this).get(OrderViewModel.class);
orderViewModel.init();
orderViewModel.getOrderListItems().observe(this, this::onOrderListChanged);
orderViewModel.initiateOrderListFetch();
}
onOrderListChanged:
public void onOrderListChanged(List<OrderListItem> orderListItems) {
mAdapter.dataset = orderListItems;
mAdapter.notifyDataSetChanged();
}
我之前提到的mAdapter
变量的类型为OrderListItemRecyclerViewAdapter
。
ViewModel
在ViewModel中,我有一个函数:
LiveData<List<OrderListItem>> getOrderListItems() {
return model.orderListItems;
}
和这个:
void initiateOrderListFetch() {
model.fetchOrderList();
}
模型
在我的OrderModel
中,我有以下变量:
MutableLiveData<List<OrderListItem>> orderListItems = new MutableLiveData<>();
从ViewModel调用的函数fetchOrderList()
如下:
void fetchOrderList() {
new FetchOrderListTask(this).execute();
}
此任务正在使用spring android rest模板执行对服务器的HTTP请求。 (org.springframework.android:spring-android-rest-template
)
任务完成后,它将调用执行的委托函数orderListTaskResponseFinished
orderListItems.setValue(response);
会在getOrderListItems
中启动函数ViewModel
。
此后,将调用Activity中的绑定并更新视图。
我的问题: 我是否正确设置了架构?从模型调用网络任务的方法是一个不错的选择吗? 有人对改进有其他建议吗?
其他问题: 我可以为以后的DetailActivity使用相同的ViewModel和Model吗? 谢谢!