gpt4 book ai didi

NavigationDrawer中的Android双向数据绑定(bind)

转载 作者:行者123 更新时间:2023-11-29 19:45:20 26 4
gpt4 key购买 nike

我正在使用数据绑定(bind)库实现新应用。不幸的是,我在抽屉导航中找不到双向绑定(bind)的任何示例(使用 android.support.v4.widget.DrawerLayout)。抽屉布局包含一些可变文本和两个切换开关(使用 android.support.v7.widget.SwitchCompat)。

在这种情况下使用数据绑定(bind)有意义吗?关于如何实现这个的任何想法?有没有人有/找到这种实现的一些示例代码?

最佳答案

Does it make sense to use data binding in this scenario?

这真的取决于架构。数据绑定(bind)通常与 MVVM 架构一起使用(如果您不熟悉它,请参阅 this example)。但无论如何,如果您喜欢一致地编写代码,您就不会希望将数据绑定(bind)与传统的 findViewById() 混合使用,并且您希望数据绑定(bind)无处不在。

实现与任何其他数据绑定(bind)案例没有太大区别。布局(在此示例中名为 R.layout.act_main)应该具有双向绑定(bind):

<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<data>

<import type="android.view.View"/>

<variable
name="VM"
type="your.package.name.MainActivityVM"/>
</data>

<android.support.v4.widget.DrawerLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">

<!-- Put your main activity content here-->

</RelativeLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
android:orientation="vertical">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{VM.mutableText}"
tools:text="Sample text" />

<android.support.v7.widget.SwitchCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="@={VM.optionEnabled}"
android:text="Option"/>

</LinearLayout>
</android.support.v4.widget.DrawerLayout>
</layout>

View model应该有相应的getter:

public class MainActivityVM {

private ObservableField<String> mMutableText = new ObservableField<>();
private ObservableBoolean mOptionEnabled = new ObservableBoolean(false);

public MainActivityVM() {
//Your stuff here. E.g., you can add a listener to track the switch toggle:
mOptionEnabled.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
@Override
public void onPropertyChanged(Observable sender, int propertyId) {
if (mOptionEnabled.get()) {
//Do some stuff if the user turned the switch on
}
}
});
mMutableText.set("Hello world!");
}

public ObservableField<String> getMutableText() {
return mMutableText;
}

public void setOptionEnabled(ObservableBoolean optionEnabled) {
this.mOptionEnabled = optionEnabled;
}

public ObservableBoolean isOptionEnabled() {
return mOptionEnabled;
}
}

View 模型应该像这样绑定(bind)在 Activity 中:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

ActMainBinding binding = DataBindingUtil.setContentView(this, R.layout.act_main);

MainActivityVM viewModel = new MainActivityVM();
binding.setVM(viewModel);
}
}

关于NavigationDrawer中的Android双向数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37857019/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com