web-dev-qa-db-ja.com

Android [クリア]ボタンですべてのEditTextフィールドをクリアする

レイアウトのすべてのEditTextフィールドを_Clear Button_でクリアするにはどうすればよいですか。約10の異なるEditTextsを持つ登録アクティビティがあります。具体的にそれぞれの参照を取得し、set.Text("");を取得できることを知っています。しかし、よりダイナミックでエレガントな方法を探しています。おそらくLayoutを取得し、そこにあるすべての項目をループしてEditText型を探し、それらを_""_に設定します。しかし、どうやってそれを行うのかわからず、それをウェブ上で検索しようとしましたが、運はありませんでした。サンプルコードはありますか?

43
JPM

@Pixieによる答えは素晴らしいですが、もっと良くしたいと思います。

このメソッドは、すべてのEditTextが単一の(1つの)レイアウトにある場合にのみ正常に機能しますが、ネストされたレイアウトが多数ある場合、このコードはそれらを処理しません。

しばらく頭をかいた後、私は次の解決策を作りました:

private void clearForm(ViewGroup group) {       
    for (int i = 0, count = group.getChildCount(); i < count; ++i) {
        View view = group.getChildAt(i);
        if (view instanceof EditText) {
            ((EditText)view).setText("");
        }

        if(view instanceof ViewGroup && (((ViewGroup)view).getChildCount() > 0))
            clearForm((ViewGroup)view);
    }
}

このメソッドを使用するには、次の方法で呼び出します。

clearForm((ViewGroup) findViewById(R.id.sign_up));

R.id.sign_upをXMLファイルのルートレイアウトのIDに置き換えることができる場所。

これが私のような多くの人々に役立つことを願っています。

:)

60
necixy

ビューグループ内のすべての子を反復処理し、EditTextフィールドをすべてクリアできます。

ViewGroup group = (ViewGroup)findViewById(R.id.your_group);
for (int i = 0, count = group.getChildCount(); i < count; ++i) {
    View view = group.getChildAt(i);
    if (view instanceof EditText) {
        ((EditText)view).setText("");
    }
}
29
Michael

editText.getText().clear();を使用します

8
Malder

任意のアクションのonclickの後、ステップの下で行う

 ((EditText) findViewById(R.id.yoursXmlId)).setText("");

または、すべての子を反復してすべてのEditTextフィールドをクリアします。

ViewGroup group = (ViewGroup)findViewById(R.id.your_group);
for (int i = 0, count = group.getChildCount(); i < count; ++i) {
View view = group.getChildAt(i);
if (view instanceof EditText) {
    ((EditText)view).setText("");
}
}

またはシンプルな下のステップを使用してください:

editText.getText().clear();

役立つかもしれません。

1
Rahul Baradia

私の場合、これを実行しました。

public static void resetForm(ViewGroup group) {
    for (int i = 0, count = group.getChildCount(); i < count; ++i) {
        View view = group.getChildAt(i);
        if (view instanceof EditText) {
            ((EditText) view).getText().clear();
        }

        if (view instanceof RadioGroup) {
            ((RadioButton)((RadioGroup) view).getChildAt(0)).setChecked(true);
        }

        if (view instanceof Spinner) {
            ((Spinner) view).setSelection(0);
        }

        if (view instanceof ViewGroup && (((ViewGroup) view).getChildCount() > 0))
            resetForm((ViewGroup) view);
    }
}
0
Kasim Rangwala

これをネストされたLinearLayoutに使用して、EditTextとRadioButtonをクリアしました

//メソッドclear private void clear(ViewGroup group){for(int i = 0、count = group.getChildCount(); i

        if(view instanceof  LinearLayout)
        {
            clear((ViewGroup) view);
        }
         else if(view instanceof EditText)
        {
            ((EditText) view).getText().clear();
        }
        if (view instanceof  RadioButton)
        {
            ((RadioButton) view).setChecked(false);
        }
    }//end for
}//end method clear
0
Siamak Eshghi

ボタンの機能にこれを入力します

finish();
startActivity(this,YourCurrentActivity.class);

それと同じくらい簡単。ようこそ。

0
ykb

あなたはいつでもこれを行うことができます...それは私のために働いています:

mClearButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mEditName.getText().clear();
            mEditSummary.getText().clear();
            mEditPrice.getText().clear();
            mEditQuantitiy.getText().clear();

        }
    });

この方法では、すべてのフィールドを一度クリアする太いボタンが1つあります

0
RileyManda