我正在尝试LiveData和ViewModel体系结构。我在MainActivity上观察到的ViewModel中有一个简单的计数器。我能够确认在观察者的onChanged中获取了数据,但是问题是textView并没有更新每个增量,而我只得到了最后一个9。
这是我的代码。
MainActivity
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.setNumber(model);
binding.setLifecycleOwner(this);
model = ViewModelProviders.of(this).get(MainActivityViewModel.class);
textView = findViewById(R.id.textView);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
model.incrementNumber();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
model.getNumber().observe(this, new Observer<String>() {
@Override
public void onChanged(final String s) {
Log.d(TAG, s);
textView.setText(s);
}
});
}
这是viewModel
public class MainActivityViewModel extends AndroidViewModel {
MutableLiveData<String> number;
public MainActivityViewModel(@NonNull Application application) {
super(application);
number = new MutableLiveData<String>("0");
}
public MutableLiveData<String> getNumber(){
return number;
}
public void incrementNumber() throws InterruptedException {
for(int x = 0; x < 10 ; x++){
Thread.sleep(500);
number.setValue(String.valueOf(x));
}
}
}
答案 0 :(得分:1)
尝试使用主线程Handler.postDelayed,它将增加数量并重新发布到Handler,而不是Thread.sleep。