我有一个带有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的文档。
答案 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