gpt4 book ai didi

android - 如何将 Android DataBinding 绑定(bind)到菜单?

转载 作者:可可西里 更新时间:2023-11-01 18:55:22 25 4
gpt4 key购买 nike

因为它支持 android 中的数据绑定(bind)菜单?我写了这段代码,但出现错误:“错误:(16, 26) 未指定资源类型(在 'visible' 处,值为 '@{item.visible}')。”

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="item"
type="ru.dixy.ubiworkerchecklistsmobile.Models.Fact"/>
<import type="android.view.View"/>
</data>
<item
android:id="@+id/compliteitem"
android:title="mybutton"
android:icon="@drawable/complite"
android:visible="@{item.visible}"
app:showAsAction="ifRoom"
/>
</menu>

最佳答案

“目前,数据绑定(bind)只针对布局资源,不针对菜单资源”

但是,该行为可以通过 Observable.OnPropertyChangedCallback 实现。首先你需要定义 OnPropertyChangedCallback:

private final Observable.OnPropertyChangedCallback propertyChangedCallback = new Observable.OnPropertyChangedCallback() {
@Override
public void onPropertyChanged(Observable observable, int i) {
getActivity().invalidateOptionsMenu();
}
};

假设您在 fragment 中绑定(bind)了 Fact 模型:

<variable
name="item"
type="ru.dixy.ubiworkerchecklistsmobile.Models.Fact"/>

现在您需要注册 propertyChangedCallback 并在完成后取消注册:

@Override
public void onStart() {
super.onStart();
binding.getItem().addOnPropertyChangedCallback(propertyChangedCallback);
}

@Override
public void onStop() {
super.onStop();
binding.getItem().removeOnPropertyChangedCallback(propertyChangedCallback);
}

现在我们已准备好根据事实模型更新您的 View 状态:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.menu_fact, menu);
}

@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
menu.findItem(R.id.compliteitem).setVisible(binding.getItem().isVisible());
}

关于android - 如何将 Android DataBinding 绑定(bind)到菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38660735/

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