Es fällt mir schwer zu verstehen, wie die Ansicht mithilfe der Datenbindung aktualisiert wird. Ich habe ein einfaches Beispiel, mit dem ich experimentiere, bei dem ein Kippschalter eine Schaltfläche in der Ansicht erscheinen/verschwinden lässt.So aktualisieren Sie die Sichtbarkeit eines Layoutelements mit der Datenbindung
erwartetes Verhalten:
Das Toggle Umschaltfläche sollte die "Schlüssel hinzufügen" auf/von (d VISIBLE
oder GONE
).
tatsächliches Verhalten:
Der „Schlüssel hinzufügen“, um die Sichtbarkeit aktualisiert wird nicht. Es wird nur einmal beim Laden des Layouts gesetzt. Hier
ist die Layout-Datei:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="mainActivity"
type="tanager.sandbox.MainActivity" />
<variable
name="businessLogic"
type="tanager.sandbox.BusinessLogic" />
</data>
<RelativeLayout
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="tanager.sandbox.MainActivity">
<LinearLayout
android:id="@+id/linear_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<Button
android:id="@+id/add_key_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="@{businessLogic.getVisible()}"
android:text="@string/add_key" />
</LinearLayout>
<ToggleButton
android:id="@+id/toggleButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/linear_layout"
android:layout_weight="3"
android:text="ToggleButton"
android:onClick="@{() -> mainActivity.click()}"/>
</RelativeLayout>
</layout>
Wenn die Toggle-Taste gedrückt wird, es ruft eine Methode auf der Haupttätigkeit, die einen Wert in der Business-Logik schaltet. Ich erwarte, dass die add_key_button
ihre Sichtbarkeit automatisch aktualisiert, wenn die Umschalttaste gedrückt wird. Hier ist die MainActivity
:
public class MainActivity extends AppCompatActivity {
private BusinessLogic _businessLogic;
@Override
protected void onCreate(Bundle savedInstanceState) {
_businessLogic = new BusinessLogic();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActivityMainBinding binding = DataBindingUtil.setContentView(this,
R.layout.activity_main);
binding.setMainActivity(this);
binding.setBusinessLogic(_businessLogic);
}
public void click() {
_businessLogic.toggleVisibility();
}
}
Und hier ist die Business-Logik-Klasse:
public class BusinessLogic extends BaseObservable {
private boolean visible;
public BusinessLogic(){
visible = true;
}
public void toggleVisibility(){
visible = !visible;
notifyPropertyChanged(BR.visible);
}
@Bindable
public int getVisible(){
return visible? View.VISIBLE:View.GONE;
}
}