editbox lostfocus在错误的edittext框中触发

时间:2011-01-13 21:59:32

标签: android

我有一个带有2个edittext框的简单应用程序。当输入输入第一个框时,执行一组计算。如果将输入放入另一个,则会发生一组不同的计算。

因此,如果在第一个框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的文档。

2 个答案:

答案 0 :(得分:2)

在你的问题中,你有这个。

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两次...
(除非这只是你问题中的拼写错误,而你的代码实际上看起来不同......)

答案 1 :(得分:0)

根据http://developer.android.com/reference/android/view/View.OnFocusChangeListener.html

onFocusChange被定义为public abstract void onFocusChange(View v,boolean hasFocus),所以你的boolean名为lostFocus被向后命名,让你感到困惑,我建议你把它改成像hasFocus这样的东西。

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