【问题标题】:Getting force close when wanting to change focus from one EditText to Another想要将焦点从一个 EditText 更改为另一个时强制关闭
【发布时间】:2011-07-25 18:40:45
【问题描述】:

这是为我的 Android 应用程序。我有两个 EditText 字段设置为每个字段中最多可以输入一个字符。一旦用户输入第一个字符,我希望焦点自动跳转到第二个 EditText 字段。我在第一个编辑文本上设置了一个 addTextChangedListener 并让它在文本字符串大于 1 时进行侦听。然后我将请求焦点调用到第二个编辑文本上。但是,当我在第一个编辑文本框中输入字符时,我一直收到强制关闭。从我在 StackOverflow 上看到的内容来看,这应该可行。有人知道为什么不是吗?我在下面发布了相关代码。谢谢。

    LinearLayout llview = new LinearLayout(this);
    llview.setOrientation(LinearLayout.VERTICAL);

    EditText character1 = new EditText(this);
    EditText character2 = new EditText(this);
    character2.setId(2);

    character1.addTextChangedListener(new TextWatcher(){

        EditText character2 = (EditText) findViewById(2);

        @Override
        public void afterTextChanged(Editable s) {

            if(s.length()>0)
            {
                character2.requestFocus();
            }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,int after){}

        @Override
        public void onTextChanged(CharSequence s, int start, int before,int count) {}

    }); 
           llview.addView(character1);
           llview.addView(character2);
           this.setContentView(llview);

【问题讨论】:

  • 堆栈跟踪说明了什么?

标签: java android focus android-edittext


【解决方案1】:

我不确定您是否已发布所有相关代码。看起来您正在以编程方式构建视图层次结构(而不​​是使用布局文件),但是没有代码显示您将 character1 和 character2 插入到视图层次结构中的位置。如果您发布用于构建视图层次结构的代码将会很有帮助。

另外,到目前为止,您尝试了哪些调试步骤?您是否设置断点以确认您的变量在调用方法时不是空指针?你做过堆栈跟踪吗?

如果我只是根据您发布的这段代码来猜测,那么我不得不猜测您没有将 character1 和 character2 插入到您的活动的视图层次结构中,并且 findViewById(2) 只是返回 null。您是否检查过 findViewById(2) 实际上返回的不是空值?

【讨论】:

  • 我添加了相关信息。我已经删掉了一些不相关的代码。基本上,如果代码 character2.requestFocus();不存在,一切正常。 (两个编辑文本都显示在视图中,我可以编辑它们。但是,使用代码 character2.requestFocus(); ,只要我在 character1 编辑文本中输入一个字符,我就会强制关闭。
  • 你是否在包含 character2.requestFocus() 的行上设置了断点来查看 character2 是否实际上指向 null?
  • 如果您删除了character2.setId(2);,是否有帮助?我只是想知道 2 号是否保留给系统。
  • 我尝试将 ID 更改为更大的数字和同样的问题。我最终只使用了 1 个文本编辑而不是 4 个。试图用 4 个单位数字输入创建一个密码输入框,并在输入数字后让焦点跳转到下一个框。我见过一些应用程序这样做,但决定 1 个带有 4 位输入的框也可以。谢谢
猜你喜欢
  • 2012-12-04
  • 1970-01-01
  • 1970-01-01
  • 2014-03-05
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
相关资源
最近更新 更多