Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android editbox lostfocus在错误的edittext框上激发_Android - Fatal编程技术网

Android editbox lostfocus在错误的edittext框上激发

Android editbox lostfocus在错误的edittext框上激发,android,Android,我有一个带有2个编辑文本框的简单应用程序。在第一个框中输入时,将执行一组计算。如果将输入放入另一个,则会出现一组不同的计算 因此,如果在第一个框etBox1中键入了一个数字,并且用户离开了该框,那么来自第一个框的数据将用于计算reesult并将其放入第二个框中。如果在第二个框etBox2中键入了一个数字,则该数据将用于计算第一个框的值 我试过: final EditText etBox1 = (EditText) findViewById(R.id.etBox1) final EditText

我有一个带有2个编辑文本框的简单应用程序。在第一个框中输入时,将执行一组计算。如果将输入放入另一个,则会出现一组不同的计算

因此,如果在第一个框etBox1中键入了一个数字,并且用户离开了该框,那么来自第一个框的数据将用于计算reesult并将其放入第二个框中。如果在第二个框etBox2中键入了一个数字,则该数据将用于计算第一个框的值

我试过:

final EditText etBox1 = (EditText) findViewById(R.id.etBox1) 
final EditText etBox2 = (EditText) findViewById(R.id.etBox2)

etBox1.setOnFocusChangeListener(new View.OnFocusChangeListener()
{ 
   @override
   public void onFocusChange(View v, boolean lostfocus)
   {
       if (lostFocus == true)
       { //do my calculations....}

当焦点被赋予etBox1时,而不是等待框失去焦点时,该命令将触发。这会导致应用程序崩溃,因为用户没有机会在框中输入数字。你知道为什么这是一个“hasFocus”而不是“lostFocus”吗?Android站点的lostFocus上没有可用的文档。

在你的问题中,你有这个

final EditText etBox1 = (EditText) findViewById(R.id.etBox1);
final EditText etBox1 = (EditText) findViewById(R.id.etBox1);
映射文本框时使用相同的ID。我想应该是这样的:

final EditText etBox1 = (EditText) findViewById(R.id.etBox1);
final EditText etBox2 = (EditText) findViewById(R.id.etBox2);
更不用说,当您两次定义
etBox1
时,您的代码也会出现编译错误…
(除非这只是你问题中的一个输入错误,而且你的代码实际上看起来不一样…)

onFocusChange被定义为公共抽象void onFocusChange(视图v,boolean hasFocus),因此称为lostFocus的布尔值命名为Backward,这让您很困惑,我建议将其更改为类似hasFocus的值


现在您应该看到,对于if语句是错误的,您应该检查if==false

当etBox1获得焦点时,也可能是lostfocus触发了,而不是失去了焦点。我对该方法进行了如下修改,它成功了:@Override public void onFocusChange(View v,boolean hasFocus){if(hasFocus==false)…做点什么是的,我在问题上打了个错字,但不是在代码中。对不起,你的版本就是它的编码方式。@Ted Betz;如果是这样的话,你至少应该编辑你的问题,使你的问题代码与你的真实代码看起来一样正确。否则,人们可能会看到和我一样的代码,无法提供帮助我修改了方法如下:Bugger刚刚注意到你对主要问题的评论。