18

我正在开发一个应用程序,它有 4 个用于输入数据的文本字段,并且在将焦点从一个移到另一个时遇到了性能问题。当一个字段输入了一个字符时,我使用 addTextChangedListener 来监视文本并将焦点移动到下一个文本字段。这在 4.1.1 之前的 android 版本上运行良好,但由于在 4.1.1 上进行测试,当您在焦点出现在下一个字段中之前按下一个键时会出现明显的滞后。这意味着如果用户快速键入,按键可能会丢失。

我有一个使用以下代码的简单应用程序

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    one = (EditText)findViewById(R.id.editText1);
    two = (EditText)findViewById(R.id.editText2);

    one.addTextChangedListener(new TextWatcher() {


        @Override
        public void afterTextChanged(Editable s) {
            two.requestFocus();

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            // TODO Auto-generated method stub

        }
    });
}

这突出了这个问题。在基于 4.0.4 的设备上运行时一切都很好,但在 4.1.1 上移动焦点需要一段时间。

我已经在 2 款不同的三星 Galaxy s3 上进行了测试,一款为 4.0.4,另一款为 4.1.1。

有没有其他人看过这个?

非常感谢

保罗

4

1 回答 1

12

我不知道该问题是否有解决方案......但我可能有一个“hack”,可以在问题存在时提供替代解决方案:

  1. 将 EditText 放在屏幕外。(我通常使用RelativeLayout 将其设置在右边距的右侧)。

  2. 设置onTouchListener为可见的 EditText(并将 EditText 设置为不可点击)。应该将onTouchListener焦点放在隐藏的 EditText 上。

  3. 在隐藏的 EditText 上addTextChangedListener,为添加或删除的每个字符设置一个对可见 EditTexts 进行适当更改的选项。

例子:

如果我有 4 个 ID 为 PIN 的 EditTexts: A、和一个 EditText B,屏幕外有一个 id :CDhidden

每当我收到hidden我写的第一个字符时A

每当我收到第二个字符时,hidden我都会写B.

hidden每当我在我删除的第二个字符上收到删除时B

...

我在我的一个应用程序上做类似的事情,没有问题。

于 2012-12-12T18:58:05.313 回答