1. ホーム
  2. android

[解決済み] EditText setOnFocusChangeListenerをすべてのEditTextに設定する。

2022-02-12 22:37:07

質問

いくつかのEditTextフィールドがあり、setOnFocusChangeListenerを使ってSQLiteDatabaseに保存したいのですが、どうすればよいですか?それぞれ個別にonFocusChangeListenerを設定しなければならないのでしょうか、それともある種のキャッチオールなものがあるのでしょうか?(これは断片なのでgetActivity().findViewByID)

final TextView txtName = (TextView)getActivity().findViewById(R.id.clientHeader);
final TextView txtCompany = (TextView)getActivity().findViewById(R.id.txtContactCompany);       
final TextView txtPosition = (TextView)getActivity().findViewById(R.id.txtContactPosition);     


txtName.setOnFocusChangeListener(new OnFocusChangeListener() {          
    public void onFocusChange(View v, boolean hasFocus) {
        if(!hasFocus) {
            saveThisItem(txtClientID.getText().toString(), "name", txtName.getText().toString());
        }
    }
});


txtCompany.setOnFocusChangeListener(new OnFocusChangeListener() {          
    public void onFocusChange(View v, boolean hasFocus) {
        if(!hasFocus) {
            saveThisItem(txtClientID.getText().toString(), "company", txtCompany.getText().toString());
        }
    }
});

txtPosition.setOnFocusChangeListener(new OnFocusChangeListener() {          
    public void onFocusChange(View v, boolean hasFocus) {
        if(!hasFocus) {
            saveThisItem(txtClientID.getText().toString(), "position", txtPosition.getText().toString());
        }
    }
});

例えば... EditText ViewsのArrayList < EditText >を用意して、既存のeditTextへのポインタ(すみません、方法がわかりません)を割り当て、onFocusChangeListenerを配列リスト全体に設定する方法はありませんか?あるいは、ArrayListを繰り返し、各メンバーにonFocusChangeListenerを設定することも可能でしょうか?

あるいは、onFocusChangeListenerのイベントをすべて検出し、どのEditTextで発生したかにかかわらず、すべてのデータをデータベースに保存する方法はありますか?

解決方法は?

さて、あなたのアクティビティに OnFocusChangeListener . この方法では、すべての変更はその1つのメソッドで行われますが、どのビューのフォーカスが変わったかを確認するために v.getId() で、それに応じて処理します。

@Override
public void onFocusChange(View v, boolean hasFocus) {
    switch(v.getId()){
    case r.id.editText1:
    break;

    ...etc
    }
}