在MVVM模型下,推荐在视图模型层中处理逻辑判断,而不是在片段(视图)中使用if语句。这样可以更好地分离关注点,并更好地遵循单一职责原则。
例如,我们有一个片段,其中显示了一个列表。列表中的每个项都有一个标志,表示该项是否被选中。我们可以将选中标志作为数据模型中的一个属性,并在视图模型层中处理选中项的逻辑。在这个例子中,我们可以在ViewModel中添加一个toggleSelection方法,它会将选中状态相应地设置为true或false。
以下是选中标志作为数据模型属性的示例代码:
// 数据模型
public class Item {
private boolean selected;
public boolean isSelected() {
return selected;
}
public void setSelected(boolean selected) {
this.selected = selected;
}
}
// 视图模型
public class ItemViewModel extends ViewModel {
private Item item;
public ItemViewModel(Item item) {
this.item = item;
}
public boolean isSelected() {
return item.isSelected();
}
public void toggleSelection() {
item.setSelected(!item.isSelected());
}
}
现在,我们可以在ListViewAdapter中使用ViewModel来处理逻辑。我们只需要将选中标志绑定到视图,而不是在片段中使用if语句。
以下是ListViewAdapter中使用ViewModel的示例代码:
public class ItemAdapter extends ArrayAdapter- {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(getContext())
.inflate(R.layout.list_item, parent, false);
}
Item item = getItem(position);
ItemViewModel viewModel = new ItemViewModel(item);
TextView nameView = convertView.findViewById(R.id.item_name);
CheckBox selectionView = convertView.findViewById(R.id.item_selected);
nameView.setText(item.getName());
selectionView.setChecked(viewModel.isSelected());