2012-02-20 92 views
1

我有4个编辑文本框将自动计算输入的数字的差异。然后将显示编辑文本框的答案。我的问题是第一个事件工作正常。但我无法确定为什么第二到第四个事件不会执行。每个编辑文本框应该彼此独立工作。意思是,一旦焦点丢失,编辑文本1将运行计算并停止。当编辑文本2失去焦点时,计算将运行并停止。有没有办法让这个工作?如何获得多个焦点更改监听器事件触发

这里是我的代码

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.premix); 

    final EditText vw3 = (EditText) findViewById(R.id.editText3); 
    final EditText vw7 = (EditText) findViewById(R.id.editText4); 
    vw3.setOnFocusChangeListener(this); 
    vw7.setOnFocusChangeListener(this); 


} 
} 

    public void onFocusChange(View v, boolean hasFocus) { 

    DecimalFormat df2 = new DecimalFormat("##.#"); 
    if ((v.getId() == R.id.editText3) && (hasFocus==false)){ 

    EditText vw3 = (EditText) findViewById(R.id.editText3); 
    EditText vw2 = (EditText) findViewById(R.id.editText2); 
    float f1=0; 
    float f5=0;                
    f1=Float.parseFloat(vw3.getText().toString()); 
    f5=(f1-100)*-1; 
    String str1 = String.valueOf(df2.format(f5)); 
    vw2.setText(str1); 

     } 

if ((v.getId() == R.id.editText7) && (hasFocus==false)){ 

    EditText vw7 = (EditText) findViewById(R.id.editText7); 
    EditText vw8 = (EditText) findViewById(R.id.editText8); 
    float f2=0; 
    float f6=0;                
    f2=Float.parseFloat(vw7.getText().toString()); 
    f6=(f2-100)*-1; 
    String str2 = String.valueOf(df2.format(f6)); 
    vw8.setText(str2); 
    } 
} 

谁能帮助我?

回答

0

多天的试错,我找到了解决方案!

在OnCreate中部分中,您将需要设置你的意见

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.premix); 

EditText vw3 = (EditText) findViewById(R.id.editText3); 
EditText vw7 = (EditText) findViewById(R.id.editText4); 
vw3.setOnFocusChangeListener(this); 
vw7.setOnFocusChangeListener(this); 


} 

现在你听由这样的焦点变化。

public void onFocusChange(View v, boolean hasFocus) { 

if((v.getId() == R.id.editText7) && (hasFocus == false)) 
    calc1();  

if((v.getId() == R.id.editText10) && (hasFocus == false)) 
    calc2(); 

然后分开单独的逻辑并为计算提供公共空白。

public void calc1(){ 
//do something here 
} 

public void calc2(){ 
//do something here 
} 

这样做的结果是不同的编辑文本会相互独立。

此外: 如果您在自定义ViewGroup中执行此操作,则需要实现View.OnFocusChangeListener。