以下是一个不使用DataBinding的MVVM架构示例,使用RxJava作为数据响应库:
首先,创建一个User类,表示用户数据模型:
public class User {
private String name;
private String email;
public User(String name, String email) {
this.name = name;
this.email = email;
}
public String getName() {
return name;
}
public String getEmail() {
return email;
}
}
创建一个UserRepository类,用于获取用户数据:
public class UserRepository {
public Observable getUser() {
// 模拟从网络或数据库获取用户数据的操作
return Observable.just(new User("John Doe", "johndoe@example.com"));
}
}
创建一个UserViewModel类,用于处理用户数据的业务逻辑:
public class UserViewModel {
private UserRepository userRepository;
private BehaviorSubject userSubject;
public UserViewModel() {
userRepository = new UserRepository();
userSubject = BehaviorSubject.create();
}
public void loadUser() {
userRepository.getUser()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(user -> userSubject.onNext(user));
}
public Observable getUserObservable() {
return userSubject;
}
}
在Activity或Fragment中,创建UserViewModel实例并订阅getUserObservable()方法来获取用户数据,并更新UI:
public class MainActivity extends AppCompatActivity {
private TextView nameTextView;
private TextView emailTextView;
private UserViewModel userViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
nameTextView = findViewById(R.id.nameTextView);
emailTextView = findViewById(R.id.emailTextView);
userViewModel = new UserViewModel();
userViewModel.getUserObservable()
.subscribe(user -> {
nameTextView.setText(user.getName());
emailTextView.setText(user.getEmail());
});
userViewModel.loadUser();
}
}
这个示例中,UserViewModel类负责处理业务逻辑和数据的获取,MainActivity负责订阅数据并更新UI。RxJava的Observable和Subscriber用于实现数据的响应式处理。