Android 处理活动初始化
我有一个活动,在这个活动中,我有一些初始化代码:Android 处理活动初始化,android,android-architecture-components,android-viewmodel,Android,Android Architecture Components,Android Viewmodel,我有一个活动,在这个活动中,我有一些初始化代码: private fun init() { val authorFullName = photo?.user?.name ?: "?" val source = getString(R.string.unknown) photoAuthorText.text = String.format(getString(R.string.photo_by_s_on_s), authorFullName, so
private fun init() {
val authorFullName = photo?.user?.name ?: "?"
val source = getString(R.string.unknown)
photoAuthorText.text = String.format(getString(R.string.photo_by_s_on_s), authorFullName, source)
Utils.makeUnderlineBold(photoAuthorText, arrayOf(authorFullName, source))
}
private fun loadPhoto() {
Glide.with(this)
.asBitmap()
.load(photo?.urls?.regular)
.into(object : SimpleTarget<Bitmap>() {
override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
photoImageView.setImageBitmap(resource)
}
})
}
我的问题是我是否需要将这两种初始化方法的逻辑移到ViewModel?我不认为在活动中保持这种逻辑是个好主意
我知道数据绑定,但我不想使用它。还有其他方法吗 签入Java
活动代码
公共类UserProfileActivity扩展了活动{
UserProfileModel视图模型
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.user_activity_layout);
viewModel = ViewModelProviders.of(this).get(UserProfileModel.class);
bindData();
}
void bindData() {
viewModel.userLiveData.observer(this, new Observer() {
@Override
public void onChanged(@Nullable UserFullDetails data) {
// update ui.
// You can set Profile Image And User Details UI Components
}
});
}
}
此ViewModel代码
public class UserProfileModel extends ViewModel {
private MediatorLiveData<UserFullDetails> userFullDetails;
public UserModel() {
}
public LiveData<UserFullDetails> getUserFullDetails() {
if (userFullDetails == null) {
userFullDetails = new MediatorLiveData<>();
getUpdatedUserData();
}
return userFullDetails;
}
void getUpdatedUserData() {
LocalData<UserFullDetails> mResponse = getDataFromDataSource(); //Data come from local or cloud
userFullDetails.setValue(mResponse.getData());
}
}
公共类UserProfileModel扩展了ViewModel{
私有中介livedata userFullDetails;
公共用户模型(){
}
公共LiveData getUserFullDetails(){
if(userFullDetails==null){
userFullDetails=new MediatorLiveData();
getUpdateUserData();
}
返回用户详细信息;
}
void getUpdateUserData(){
LocalData mResponse=getDataFromDataSource();//数据来自本地或云
setValue(mResponse.getData());
}
}
我的问题是哪种方法是最好的,我不需要一个如何实现的例子,但是谢谢you@xskit与数据绑定相比,上述方法对我来说效果很好
public class UserProfileModel extends ViewModel {
private MediatorLiveData<UserFullDetails> userFullDetails;
public UserModel() {
}
public LiveData<UserFullDetails> getUserFullDetails() {
if (userFullDetails == null) {
userFullDetails = new MediatorLiveData<>();
getUpdatedUserData();
}
return userFullDetails;
}
void getUpdatedUserData() {
LocalData<UserFullDetails> mResponse = getDataFromDataSource(); //Data come from local or cloud
userFullDetails.setValue(mResponse.getData());
}
}