5.6
安卓架构模式 MVVM 实战
MVVM(Model-View-ViewModel)架构模式通过数据绑定和 ViewModel 层,有效分离 UI 逻辑与业务逻辑。以下是 Java 实现的关键步骤:
-
添加依赖
groovy
dependencies {
implementation 'androidx.lifecycle:lifecycle-viewmodel:2.6.2'
implementation 'androidx.lifecycle:lifecycle-livedata:2.6.2'
implementation 'androidx.databinding:databinding-runtime:7.8.0'
} -
定义数据模型
java
public class User {
private String name;
private int age;public User(String name, int age) {
this.name = name;
this.age = age;
}public String getName() {
return name;
}public int getAge() {
return age;
}
} -
创建 ViewModel
java
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
public class UserViewModel extends ViewModel {
private MutableLiveData
public LiveData<User> getUser() {
return userLiveData;
}
public void loadUser() {
// 模拟从网络或数据库加载数据
User user = new User("John Doe", 30);
userLiveData.setValue(user);
}
}
4. 布局文件中使用数据绑定
xml
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewModel.user.name}" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{String.valueOf(viewModel.user.age)}" />
</LinearLayout>
5. Activity 中设置 ViewModel 和数据绑定
java
public class MainActivity extends AppCompatActivity {
private ActivityMainBinding binding;
private UserViewModel viewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
viewModel = new ViewModelProvider(this).get(UserViewModel.class);
binding.setViewModel(viewModel);
binding.setLifecycleOwner(this);
viewModel.loadUser();
}
}