public class MainActivity extends AppCompatActivity { private EditText etName; private Button btnSubmit; private TextView tvResult; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); etName = findViewById(R.id.et_name); btnSubmit = findViewById(R.id.btn_submit); tvResult = findViewById(R.id.tv_result); DataBindingAdapter adapter = new DataBindingAdapter(); adapter.addBinding(new EditTextBinding(etName, "text", adapter, "name")); adapter.addBinding(new ButtonBinding(btnSubmit, "onClick", adapter, "submit")); adapter.addBinding(new TextViewBinding(tvResult, "text", adapter, "result")); } public static class DataBindingAdapter { private Map<String, Object> bindings; public DataBindingAdapter() { bindings = new HashMap<>(); } public void addBinding(Binding binding) { bindings.put(binding.getProperty(), binding); } public void notifyPropertyChanged(String property) { Binding binding = bindings.get(property); if (binding != null) { binding.update(); } } public void submit() { String name = (String) bindings.get("name").getValue(); if (name.trim().isEmpty()) { } else { } } } public static abstract class Binding { protected Object target; protected String property; protected Object value; public Binding(Object target, String property, Object value) { this.target = target; this.property = property; this.value = value; } public String getProperty() { return property; } public Object getValue() { return value; } public abstract void update(); } public static class EditTextBinding extends Binding { public EditTextBinding(Object target, String property, Object value) { super(target, property, value); } @Override public void update() { ((EditText) target).setText((CharSequence) value); } } public static class ButtonBinding extends Binding { public ButtonBinding(Object target, String property, Object value) { super(target, property, value); } @Override public void update() { // Do nothing } } public static class TextViewBinding extends Binding { public TextViewBinding(Object target, String property, Object value) { super(target, property, value); } @Override public void update() { ((TextView) target).setText((CharSequence) value); } } }


上一篇:
下一篇:
切换中文