2012-02-20 8 views
1

入力した番号の差異を自動的に計算する4つの編集テキストボックスがあります。次に、編集テキストボックスへの回答を表示します。私の問題は、最初のイベントが正常に動作することです。しかし、第2から第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

多くの試行錯誤の日に解決策が見つかりました!あなたは今、あなたはこれを行うことにより、フォーカスの変更をリッスンご意見

@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); 


} 

を設定する必要がありますOnCreateの部に

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を実装する必要があります。

関連する問題