Android Spinner 设置选择与 2 向绑定

2024-01-10

当配置了 2 路数据绑定时,我正在努力获取一些与 Android spinner 一起使用的功能。我想通过 2 路数据绑定设置微调器的初始值android:selectedItemPosition。微调器条目由 ViewModel 初始化并正确填充,因此数据绑定似乎工作正常。

问题在于 2 路绑定selectedItemPosition。该变量由 ViewModel 初始化为 5,但微调器的所选项目仍为 0(第一项)。调试时,ObservableInt 的值最初为 5(按设置),但在executeBindings 的第二阶段重置为零。

任何帮助,将不胜感激。

test_spinner_activity.xml

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

    <data>
        <variable name="viewModel"
                  type="com.aapp.viewmodel.TestSpinnerViewModel"/>
    </data>
    <LinearLayout android:layout_width="match_parent"
                  android:layout_height="wrap_content">
       <android.support.v7.widget.AppCompatSpinner
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:id="@+id/sTimeHourSpinner"
            android:selectedItemPosition="@={viewModel.startHourIdx}"
            android:entries="@{viewModel.startTimeHourSelections}"/>
    </LinearLayout>
</layout>

TestSpinnerViewModel.java

public class TestSpinnerViewModel {
    public final ObservableArrayList<String> startTimeHourSelections = new ObservableArrayList<>();
    public final ObservableInt startHourIdx = new ObservableInt();

    public TestSpinnerViewModel(Context context) {
        this.mContext = context;

        for (int i=0; i < 24; i++) {
            int hour = i;
            startTimeHourSelections.add(df.format(hour));
        }
        startHourIdx.set(5);
    }
}

TestSpinnerActivity.java

public class TestSpinnerActivity extends AppCompatActivity {
    private TestSpinnerActivityBinding binding;
    private TestSpinnerViewModel mTestSpinnerViewModel;

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

        binding = DataBindingUtil.bind(findViewById(R.id.test_spinner));
        mTestSpinnerViewModel = new TestSpinnerViewModel(this);
        binding.setViewModel(mTestSpinnerViewModel);
    }

我正在使用 Android Studio 2.2.2 并启用了数据绑定。


谢谢你的建议。但我找到了我自己问题的答案。事实证明,原因是android:selectedItemPosition=@={viewModel.startHourIdx}变量从初始化值 5 重置为 0 是因为声明顺序selectedItemPosition and entries属性。在我的示例中,它们是按特定顺序声明的,自动生成的绑定代码按相同的顺序生成初始化。

因此,尽管selectedItemPosition的初始化设置正确entries导致 ArrayAdapter 的实例化,从而重置selectedItemPosition to 0.

因此,修复方法是交换布局文件中的两个属性声明。

<data>
    <variable name="viewModel"
              type="com.aapp.viewmodel.TestSpinnerViewModel"/>
</data>
<LinearLayout android:layout_width="match_parent"
              android:layout_height="wrap_content">
   <android.support.v7.widget.AppCompatSpinner
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:id="@+id/sTimeHourSpinner"
        android:entries="@{viewModel.startTimeHourSelections}"
        android:selectedItemPosition="@={viewModel.startHourIdx}"/>
</LinearLayout>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Spinner 设置选择与 2 向绑定 的相关文章

  • 如何从 AAR 依赖项中排除特定资源?

    有没有一种相当简单的方法来实现模块的build gradle文件来指示应排除依赖项中的某些文件 我特别感兴趣的是从 AAR 中排除某些资源 金丝雀泄密 https github com square leakcanary是一个有趣的库 可帮
  • ACTION_VIEW 的 Intent.createChooser 仅显示默认浏览器

    我正在尝试使用 Intent createChooser 显示应用程序选择器对话框 该对话框将列出用户手机中所有可用的网络浏览器 我正在使用下面的代码 Intent browserIntent new Intent Intent ACTIO
  • 如何改变android中menuItem的背景颜色?

    我正在以编程方式将菜单项添加到菜单中 我想在选择特定项目时添加背景颜色 如何为 menuItem 添加背景 您的回答将不胜感激 虽然其他答案提供了更改样式 这会影响all菜单项 据我了解 需要更改一个菜单项 我建议你使用android ac
  • 查找回收器视图中的第一个可见项目是否是列表的第一项

    我有一个包含 13 个数据项的回收器视图 我想知道列表中的第一项是否可见 我知道像这样的方法findFirstVisibleItemPosition and findLastVisibleItemPosition但他们没有说明第一个可见项目
  • Android studio 在日志猫中“清除全部”,更改日志级别过滤器时日志仍然会回来

    在 LogCat 中 当我单击 全部清除 按钮时 它似乎清除了所有日志 但是 如果我更改日志级别并返回到之前的日志级别 则所有日志都会返回 例如 我正在查看 Verbose 我选择 全部清除 日志清除 我切换到 调试 我切换回 详细 现在所
  • 无法合并 Dex - Android Studio 3.0

    当我在稳定频道中将 Android Studio 更新到 3 0 并运行该项目时 我开始收到以下错误 Error Execution failed for task app transformDexArchiveWithExternalLi
  • 将标题设置为操作栏时出现空指针异常

    Error Caused by java lang NullPointerException Attempt to invoke virtual method void android app ActionBar setTitle java
  • Google Inbox 类似 RecyclerView 项目打开动画

    目前 我正在尝试实现 Google Inbox 例如RecyclerView行为 我对电子邮件打开动画很好奇 我的问题是 该怎么做 我的意思是 他们使用了哪种方法 他们用过吗ItemAnimator dispatchChangeStarti
  • Android 手机应用意图

    我想在手机上启动手机应用程序作为意图 我正在使用这个代码 startActivity getPackageManager getLaunchIntentForPackage com android phone 但该函数抛出一个空指针异常 因
  • 如何检测 Google Play 上是否有我的应用程序的更新? [复制]

    这个问题在这里已经有答案了 有没有办法以编程方式检查 Google Play 上我的应用程序是否有更新 以便通知用户 我知道 android google play 有自动通知 但我想使用我自己的通知 弹出消息来更新可用性 有点像 Vibe
  • Cordova 地理定位不适用于 Android

    我想在 Android 上使用地理定位 我用 Apache Cordova 编写应用程序 地理定位在 android 电脑模拟器和 android 手机上均不起作用 I try http cordova apache org docs en
  • Android 在启动时启动服务,如何在设备重启后重新启动服务类?

    我需要在启动时启动一项服务 我搜索了很多 他们正在谈论广播接收器 由于我是 Android 开发新手 所以我对 Android 上的服务并没有清楚的了解 请提供一些源代码 您的接收者 public class MyReceiver exte
  • Python Kivy - 在本机网络浏览器中打开 url 的应用程序

    我尝试制作一个简单的应用程序 在单击 Screen One 上的按钮后 在 Kivy 中打开一个网页 我使用了这个主题 Python 在应用程序中直接显示网络浏览器 iframe https stackoverflow com questi
  • 当参数具有默认值时,为什么无法使用导航组件将参数传递给片段?

    我正在使用导航组件 但我不明白为什么如果定义了参数 则将参数传递给下面的方法时会出现错误 我正在使用 SafeArgs 只有当我为此参数定义默认值时才会出现此错误 有人可以解释一下为什么会发生这种情况以及如何解决它吗 这是导航图的部分代码
  • 版本 5 上带有 getBackground().setAlpha 的按钮 - 棒棒糖无法正常工作

    我有这段代码 适用于自 API 14 以来的每个版本 但在 Android 5 0 Lollipop 上无法正常工作 以下是我希望按钮出现的方式 单击按钮1 buttonArrivals getBackground setAlpha 180
  • 点击监听器的公共类

    我的所有 6 项活动中有 7 个按钮 所有 6 个按钮在所有活动中都具有相同的功能 如何为这 6 个按钮执行通用的单击事件侦听器 您可以创建一个实现 View OnClickListener 的新类 如下所示 public class My
  • Android:如何使视图增长以填充可用空间?

    这看起来很简单 但我不知道该怎么做 我有一个带有 EditText 和两个 ImageButtons 的水平布局 我希望 ImageButtons 具有固定大小 并且 EditText 占据布局中的剩余空间 如何才能做到这一点
  • OpenGL ES 2.0 屏幕闪烁

    我面临着一个大问题 我正在使用带有 Android 4 0 3 的 Transformer tf101 选项卡 我的应用程序使用自定义 OpenGL ES 2 0 表面 我正在用纹理渲染多个平面 该纹理大约发生变化 每秒 20 次 并通过传
  • Android应用程序kill事件捕获

    我想在我的应用程序被终止时执行一些操作 可以使用哪种方法来实现此目的 我正在开发 Android 5 0 这个问题的关键在于 您必须了解您的申请是否可以收到任何 当您的应用程序在任何情况下被终止时的额外回调 下面的答案是由德文连线 http
  • Android:获取最新意图

    如何获取发送到活动的最后一个意图 的文档onNewIntent 建议我需要做这样的事情 class MyActivity public void onNewIntent Intent intent setIntent intent reac

随机推荐

  • 如何通过用户脚本抓取 HTML 表格内容?

    我正在创建一个 Greasemonkey 脚本 该脚本读取基于文本的游戏中的信息并将其存储到数据库中以供将来使用 我想要的是能够读取用户的统计信息并将这些统计信息转换为变量 以便我可以继续使信息变得有用 这是我想从中获取统计信息的表的源代码
  • Gulp 角度单元测试指令 templateUrl

    我在互联网上阅读了很多帖子 但找不到任何有效的解决方案 我正在尝试为指令编写单元测试 并希望从模板缓存提供 html 文件 我使用 Gulp 作为构建工具 测试的 gulp 任务看起来像这样 gulp task test function
  • “其中 T :某个值”是什么意思?

    什么是where T somevalue意思是 我刚刚看到一些代码说where T Attribute 我认为这与泛型有关 但我不确定这意味着什么或它在做什么 有人知道吗 It is a 对类型参数的约束 http msdn microso
  • 当我调用数组中对象的属性时出现错误

    在打字稿代码中 我有一个包含对象的数组 当我调用 getUsers users 函数时 它会根据需要返回结果 但在控制台中我收到此错误 未捕获类型错误 无法读取未定义的属性 firstName 在 getUsers index js 20
  • Java:最简单的日期减法

    我创建了一个类 其中有两个字段需要是日期 start date and date passed 我一直在研究 java 中日期的最佳方式YYYY MM DD格式允许轻松进行日期减法 并能够 组成 日期 例如将来的日期 我想要它做什么的例子
  • R 中的向量化函数

    我在 R 中有这个数据集 看起来像这样 id sample int 10000 100000 replace TRUE res c 1 0 results sample res 100000 replace TRUE date exam t
  • SQLite DB 的 MIDP Java 实现

    是否有任何 SQLite db 的 MIDP 实现可用于在 MIDlet 中使用 sqlite db 而不是使用 RMS 当然 还有Floggy http floggy sourceforge net and OpenBaseMovil h
  • Gradle jacoco 代码覆盖率 - 然后在 Jenkins 中发布/显示

    我正在尝试为 Java 应用程序项目设置代码覆盖率 项目名称 新应用 项目结构 src java 源代码 src java test 单元测试 Junit 测试 it 测试 集成测试 测试 测试 验收测试 tomcat 包含tomcat启动
  • 在 wwwroot 之外提供静态文件,但在目录不存在时处理 PhysicalFileProvider

    我正在尝试从外部提供文件wwwroot还可以处理目录可能尚不存在的设置情况 例如 如果我构建了一个依赖于该目录的站点 但用户没有遵循安装说明并首先创建该目录 为了便于讨论 让我们假设我想要一个简单的网站 其中有一个页面可以读取该目录的内容并
  • 通过 ajax 调用 CouchDB 时得到空响应

    我是 CouchDB 的新手 所以请耐心等待 我有一个在虚拟机上运行的 CouchDB 实例 我可以通过浏览器通过蒲团或直接访问它 http 192 168 62 128 5984 articles hot dog 在浏览器中调用该 URL
  • Android 以编程方式关闭 Activity

    活动中与离开屏幕等效的操作是什么 就像当您按下后退按钮时 活动就会消失 如何从活动内部调用它以使其自行关闭 关于Activity finish http developer android com reference android app
  • java.lang.NoClassDefFoundError:com.dropbox.sync.android.DbxAccountManager

    请这不是重复的问题 不知道 但我已经将 jar 放入 libs 文件夹中 并且还完成了以下过程 And also 我已经检查过这个我收到 java lang classnotfoundException com mysql jdbc Dri
  • 可移植的比较和交换(原子操作)C/C++ 库?

    是否有任何小型库 可以将各种处理器的类似 CAS 的操作包装成可跨多个编译器移植的宏或函数 PS The 原子 hpp库 http www boost org doc libs 1 39 0 boost interprocess detai
  • MongooseError:Model.findOne() 不再接受 Function 的回调

    我在设置 mongoose 时遇到了问题 这是我的代码 const SlashCommandBuilder require discordjs builders const testSchema require Schemas js tes
  • Java 中的 Hbase CopyTable

    我想将一个 Hbase 表复制到另一个具有良好性能的位置 我想重用 CopyTable java 中的代码Hbase 服务器 github 页面 https github com apache hbase blob master hbase
  • Android 4.3 之前使用 SimpleDateFormat 的“ZZZZZ”(+03:00) 作为时区

    我在用着SimpleDateFormat有格式yyyy MM dd T HH mm ssZZZZZ 预期输出为 2014 08 26T13 00 14 03 00 但是 仅从 Android 4 3 开始支持 ZZZZZ 结果如下 以上4
  • 为使用 Electron 创建的应用程序签名 Windows 安装程序 (.exe)

    我有一个使用构建的简单应用程序电子框架 我使用以下方式打包了代码electron packager interactive 我还创建了一个Windows 安装程序文件可以使用 Inno Setup 编译器 单个 exe 文件 进行分发 这里
  • Angular 2 中条件必需的验证器指令

    我需要根据其他字段的值将某些表单字段设置为必需或不必需 内置的必需的验证器 https angular io docs ts latest api common RequiredValidator directive html指令似乎不支持
  • C# SecureString 问题

    有没有什么方法可以在不影响安全性的情况下获取 SecureString 的值 例如 在下面的代码中 一旦执行 PtrToStringBSTR 字符串就不再安全 因为字符串是不可变的 并且垃圾收集对于字符串来说是不确定的 IntPtr ptr
  • Android Spinner 设置选择与 2 向绑定

    当配置了 2 路数据绑定时 我正在努力获取一些与 Android spinner 一起使用的功能 我想通过 2 路数据绑定设置微调器的初始值android selectedItemPosition 微调器条目由 ViewModel 初始化并