在Android中,可以使用LiveData和ViewModel来实现观察者模式,避免由于点击事件触发而导致UI字段不断更新的问题。以下是一个简单的示例:
首先,创建一个ViewModel类:
public class MyViewModel extends ViewModel {
private MutableLiveData mLiveData = new MutableLiveData<>();
public MutableLiveData getLiveData() {
return mLiveData;
}
public void setLiveData(String value) {
mLiveData.setValue(value);
}
}
然后,在Activity中创建ViewModel实例并观察LiveData:
public class MainActivity extends AppCompatActivity {
private MyViewModel mViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mViewModel = ViewModelProviders.of(this).get(MyViewModel.class);
final TextView textView = findViewById(R.id.text_view);
mViewModel.getLiveData().observe(this, new Observer() {
@Override
public void onChanged(@Nullable String s) {
textView.setText(s);
}
});
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mViewModel.setLiveData("Hello World!");
}
});
}
}
这样,每次点击按钮时,都会调用setLiveData方法来更新LiveData,LiveData会自动通知观察者(即Activity中的Observer)去更新UI字段。避免了原问题中由于onClick事件触发而不断更新UI字段的情况。