观察者运行时textView没有更新

时间:2019-12-09 17:31:53

标签: java android android-livedata android-viewmodel mutablelivedata

我正在尝试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));
    }

}

}

1 个答案:

答案 0 :(得分:1)

尝试使用主线程Handler.postDelayed,它将增加数量并重新发布到Handler,而不是Thread.sleep。