5.6

安卓架构模式 MVVM 实战
MVVM(Model-View-ViewModel)架构模式通过数据绑定和 ViewModel 层,有效分离 UI 逻辑与业务逻辑。以下是 Java 实现的关键步骤:

  1. 添加依赖
    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'
    }

  2. 定义数据模型
    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;
    }
    }

  3. 创建 ViewModel
    java
    import androidx.lifecycle.LiveData;
    import androidx.lifecycle.MutableLiveData;
    import androidx.lifecycle.ViewModel;

public class UserViewModel extends ViewModel {
private MutableLiveData userLiveData = new 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();
}

}

posted @ 2025-05-06 21:40  Echosssss  阅读(8)  评论(0)    收藏  举报