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);
}
}
}