观察者 运行 时 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。