- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用数据绑定(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/
我看到很多关于在导航栏顶部设置半透明状态栏的问题,如下所示: 但我想要实现的是拥有一个非半透明状态栏,并使抽屉导航标题 View 与操作栏高度相同。这适用于前 Lollipop 设备 (API 21
这是我的代码: 主 Activity package com.pa.homeautomationblank; import android.app.Activity; import android.a
我在旋转菜单时在抽屉导航中动态(以编程方式)创建子菜单时遇到问题。我的导航 View 菜单 xml 仅包含主菜单(见下文)。调用 onCreate 事件时添加子菜单。一切正常,直到我旋转屏幕 - 子菜
我找不到实现非常自定义的 NavigationDrawer 的解决方案。我希望它有一个图像背景(黑色的一个带有白色方 block ),只有很少的项目,如下图所示: 可以制作吗?据我所知,这并不是 SD
我想要的是一个与下面设计中的主要内容无缝连接的 NavigationDrawer: 不知怎么的,我无法从抽屉里取出影子。 我试过的是这样的: drawer.setScrimColor(Color.TR
请帮我创建Toolbar,@+id/left_drawer 上面有哪些内容?是否可以?
是否可以将 NavigationDrawer 用作从上到下而不是从左到右的菜单? 最佳答案 这是 umano 应用的向上滑动面板,我在我的应用中使用了它,您可以轻松地将它转换为从上到下 https:/
我有 NavigationDrawer Activity 。当我单击 ActionBar 中的图标时,NavigationBar 打开,但有滞后。与关闭相同。我使用了本教程:https://www.y
我有一个带有此代码的抽屉导航: mDrawerListView.setAdapter(new ArrayAdapter( getActionBar().getThemedCon
我找不到使用 NavigationDrawer 轻松进行平板电脑多 Pane 布局的方法。 Play 音乐应用可以做到这一点。 我使用了 LOCK_MODE_LOCKED_OPENED 但它会按预期打
我想在我的 Android 项目中有一个 NavigationDrawer,它始终部分显示 ListView,并且这些项目也是可点击的,但是当用户拖动抽屉时,会出现完整的 ListView。 下图是我
根据 Google 指南,建议您仅在安装并打开应用程序后第一次打开 DrawerLayout(向用户展示功能)。 你会怎么做? 它似乎是 openDrawer() 方法与某种偏好的组合。 最佳答案 为
我的 DrawerLayout 设置在两边都有一个抽屉 当某个方法运行时,右边的抽屉会被填充,但是,在该方法运行之前,我可以从右侧滑动,屏幕变暗但什么也没有显示(因为在该方法运行之前布局是空的)。
我对包含两组的菜单有疑问。这种情况是当我从 group_2 中选择任何项目时,从 group_1 中最后选择的项目保持选中/突出显示。 有什么解决办法吗? 抽屉 View .xml:
我一直在尝试解决我遇到的问题,即我无法通过从右向左滑动来关闭 NavigationDrawer,但没有成功。通过从屏幕的左边缘向右滑动来打开它可以正常工作。我目前只是试图合并来自 developer.
我正在将我的应用程序更新为导航架构组件,并且我看到它有一个延迟替换 fragment ,这些 fragment 在 NavigationDrawer 中可见,并且不能顺利关闭。 到目前为止,我一直
我实现了一个基本的navigationDrawer,其中包含一个字符串数组。我希望用户单击列表中的某些内容并转到相应的Activity。然而,我在这里完全不知所措。我已经在这里阅读了很多答案,但仍然不
我创建了一个空 Activity ,然后将其更改为 DrawerLayout,每次打开菜单并单击某个项目时,抽屉都会关闭,但什么也没有发生,就像我只是打开和关闭它一样,无法执行任何其他操作. 这是布局
我是一名 Android 初学者。我正在使用 Android Studio,并使用 NavigationDrawer 创建我的 Activity 。所以我有一个 ListView,但我想向我的抽屉添加
我创建了 NavigationDrawer 类,现在我正在创建扩展抽屉导航类的新 Activity 。不幸的是我经常遇到这样的错误: java.lang.IllegalStateException:
我是一名优秀的程序员,十分优秀!