我正在尝试使用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)); } }
}
我正在尝试使用LiveData和ViewModel体系结构。我在MainActivity上观察到的ViewModel中有一个简单的计数器。我能够确认数据是在...
尝试使用主线程Handler.postDelayed,它将增加数量并重新发布到Handler,而不是Thread.sleep。