0

これが私がやろうとしていることです: 20-25 個の EditText を持つアクティビティがあります。EditText のテキストが変更されると、対応する TextView のテキストを変更する必要があります。つまり、ユーザーが毎月の食料品の支出を入力すると、食料品の年間支出を示す TextView が更新され、月間および年間の合計支出 TextView も更新されます。

TextWatcher でできることはわかっていますが、その場合、EditText ごとに個別の TextWatcher が必要になります。EditText の Id を保持し、switch-case ブロック内で適切な操作を行うカスタム TextWatcher を作成したとしても、その場合は EditText ごとにそのクラスの新しいインスタンスが必要になります。それは非常に非効率的でメモリを消費していませんか?

私はOnClickListenerのようなものを望んでいたので、いくつかの機能をオーバーライドするだけで済み、アクティビティ内のすべてのボタンのようにすべてのタスクを実行できます.onClick(View v)関数をオーバーライドするだけで済みます. これを達成する方法はありますか?

4

2 に答える 2

1

このようなものはどうですか:

yourEditText1.setOnFocusChangeListener(yourFocusChangeListener);
yourEditText2.setOnFocusChangeListener(yourFocusChangeListener);

View.OnFocusChangeListener yourFocusChageListener = new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (!hasFocus) {
            // Update your textview depending on which edittext lost focus
        }
    }
});

TextWatcher (IMO) に対するこれの利点は、ユーザーが EditText から移動したため、ユーザーが完了したことを知っていることです。唯一の問題は、発砲するために離れて移動する必要があることです(それがあなたにとってショーストッパーになるかどうかはわかりません).

于 2012-11-24T17:17:17.713 に答える
0

TextWatcherの入力イベントを「見る」ためにa を使用することは避けられませんEditText。少し前に私は同様の質問に答えました.小さな変更を加えれば、おそらくそれを使用して物事を簡単にすることができます. 私の答えのそのクラスでは、おそらくonInputChange()メソッドを変更してのIDも返す必要があるEditTextため、誰がテキスト入力をトリガーしたかがわかります。

于 2012-11-24T17:03:36.267 に答える