观察者 运行 时 textView 未更新
textView is not updating while observer is running
我正在尝试 LiveData 和 ViewModel 架构。我在 MainActivity 上观察到的 ViewModel 中有一个简单的计数器。我能够确认数据是在观察者的 onChanged 中获取的,但问题是 textView 没有更新每个增量,我只得到最后一个计数,即 9。
这是我的代码。
主要活动
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);
}
});
}
这是视图模型
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));
}
}
}
尝试使用主线程 Handler.postDelayed 来递增数字并再次 post 到处理程序而不是 Thread.sleep。
我正在尝试 LiveData 和 ViewModel 架构。我在 MainActivity 上观察到的 ViewModel 中有一个简单的计数器。我能够确认数据是在观察者的 onChanged 中获取的,但问题是 textView 没有更新每个增量,我只得到最后一个计数,即 9。
这是我的代码。
主要活动
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);
}
});
}
这是视图模型
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));
}
}
}
尝试使用主线程 Handler.postDelayed 来递增数字并再次 post 到处理程序而不是 Thread.sleep。