requestFocus for TextView on Jelly Bean slow

时间:2012-10-31 14:36:01

标签: android performance android-4.2-jelly-bean

我正在开发一个具有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。

有没有人见过这个?

非常感谢

1 个答案:

答案 0 :(得分:11)

我不知道是否有针对该问题的解决方案 ...但我可能会遇到“hack”,在问题存在时提供替代解决方案

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

  2. onTouchListener设置为可见的EditText(并将EditText设置为不可点击)。 onTouchListener应该关注隐藏的EditText。

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

  4. 示例:

    如果我有4个带有ID的PIN的EditTexts:ABCD以及ID为hidden的屏幕外的EditText :

    每当我收到hidden上的第一个字符时,我就会写A

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

    每当我在hidden的第二个字词上收到删除时,我会在B上删除。

    ...

    我在我的某个应用上做了类似的事情,没有任何问题。