【问题标题】:Three Questions三个问题
【发布时间】:2012-08-15 17:55:29
【问题描述】:

首先,我想使用这样的循环设置取消选中所有 8 个复选框:

    for (int i=1;i<8;++i){
    CheckBox view1 = (CheckBox) findViewById(R.id.CheckBox0+String.valueOf(i));
    view1.setChecked(false);
    }

它不起作用,但你明白我的意思。怎么解决?

第二:使用 Eclipse 我设置了一个表单列表。是什么导致应用程序启动时,它立即显示键盘并聚焦在编辑字段中?我希望键盘仅在用户触摸编辑字段后出现。

第三:我如何设置编辑字段的属性,当用户触摸输入时,焦点不会传递到下一个编辑字段。提前致谢。

【问题讨论】:

    标签: android forms loops focusable


    【解决方案1】:

    首先,同时提出多个问题并不好;当人们只知道一种解决方案时,它会阻止人们回答。

    1 - 依靠 ID CheckBox0, CheckBox1, CheckBox2, ... 来维持秩序是非常冒险的,而且是不好的做法。在这种情况下,您应该使用getIdentifier;这将可靠地获取 ID CheckBox1,然后是 CheckBox2 等。

    for (int i=1;i<8;++i){
        CheckBox view1 = (CheckBox) findViewById(getResources().getIdentifier("CheckBox" + i, "id", getPackageName()));
        view1.setChecked(false);
    }
    

    2 - 您需要为此使用 stateHidden 修饰符:

    <activity
        android:name="com.example.NoKeyboardActivity"
        android:windowSoftInputMode="stateHidden" />
    

    3 - 为此使用imeOptionsactionNone 是您正在寻找的人,或者(根据 cmets)actionDone 以启用“完成”按钮。

    <TextView
        ...
        android:imeOptions="actionNone" />
    

    【讨论】:

    • ids 可以使用 public.xml 可靠地分配,没有风险
    • @nandeesh 但是它们不能被迭代。
    • 如果您在 public.xml 中将 CheckBox0 中的连续数字分配给 CheckBox8,那么您只需将 i 添加到 CheckBox0 即可进行迭代
    • 如果 AAPT 工具在未来的修订版中更改为向后分配 ID?依靠 ID 连续编译是一个非常糟糕的主意。您应该始终假设这些 ID 是任意的,就像您对任何 magic number 所做的那样。
    • 如果您检查框架 developer.android.com/reference/android/R.id.html#tabcontent 。所有 id 都是任意分配的。这些 id 永远不会改变,否则 api 兼容性会中断。这是使用 public.xml 实现的。所以未来所有的 aapt 版本都将支持 public.xml
    【解决方案2】:

    每次构建后资源都有固定的id,你必须在public.xml中声明资源,然后你可以顺序访问id。检查here

    R.id.CheckBox0 也是一个 int

    findViewById(R.id.CheckBox0+ i)
    

    在 public.xml 中声明所有复选框后

    对于活动清单中的第二个问题添加 android:windowSoftInputMode="stateHidden"

    第三: 我认为您必须在 android:nextFocusDown 的布局中引用相同的编辑文本。 不知道能不能试试看

    【讨论】:

    • 您不能保证R.id.CheckBox0+ i 会起作用。 R.java 中的“id”是在添加不同资源时生成的。
    • @squonk 这就是为什么需要将 ID 添加到 public.xml。 public.xml 的唯一目的是提供固定 ID。这就是框架如何保证 android.r.id 的兼容性。检查链接stackoverflow.com/questions/9348614/…
    • 好的,我错过了使用 public.xml 的要点,但我个人认为这不是一种可行的方法。按照 Eric 在他的回答中的建议,我更倾向于使用 getIdentifier(...)
    【解决方案3】:

    1 - 请记住,这是 Java 而不是 Javascript,您不能这样做 (R.id.CheckBox0+String.valueOf(i))。通常我会创建一个包含所有 R.id 的 int 数组并循环遍历它们。

    2 - 如果键盘已经显示,您也可以使用 android:windowSoftInputMode="stateUnchanged" 来隐藏键盘。

    3 - 应该是这样,但您可以在编辑文本上使用属性 android:imeOptions="actionNone",因此输入按钮不会执行任何操作。

    【讨论】:

    • 是的,我也想过做一个数组,但我认为还有更优雅的方式。还是谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多