Android Очистка всех полей EditText с помощью кнопки «Очистить» - PullRequest
43 голосов
/ 21 апреля 2011

Как очистить все поля EditText в макете с помощью Clear Button.У меня есть регистрационная активность, которая имеет около 10 различных EditTexts.Я знаю, что могу пойти и взять ссылку на каждую из них, а затем set.Text("");Но я ищу более динамичный элегантный способ.Возможно, возьмите Layout и переберите все элементы в нем, ища типы EditText, а затем установите для них значение "".Не знаю, как это сделать, и попытался найти его в Интернете, но не повезло.Любой пример кода?

Ответы [ 10 ]

60 голосов
/ 28 апреля 2011

Ответ @Pixie замечательный, но я бы хотел сделать его намного лучше.

Этот метод отлично работает, только если все EditText находятся в одном (одном) макете, но когда есть множество вложенных макетов, этот код не справляется с ними.

После того, как я почесал голову, я принял следующее решение:

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-файла.

Надеюсь, это помогло бы многим таким же людям, как я.

:)

29 голосов
/ 21 апреля 2011

Вы можете перебрать все дочерние элементы в группе представлений и очистить все поля 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("");
    }
}
9 голосов
/ 04 сентября 2013

Использование editText.getText().clear();

1 голос
/ 03 июля 2012

после щелчка любого действия выполните шаг

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

Может быть полезным.

0 голосов
/ 02 февраля 2018

Это очень просто. Введите это в вашей функции кнопки -

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

Как все просто.Добро пожаловать.

0 голосов
/ 10 января 2018

Вы всегда можете сделать это ... это работает для меня:

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

        }
    });

таким образом, у вас есть одна толстая кнопка, которая очищает все поля для вас один раз

0 голосов
/ 21 июня 2017

использование editText.getText().clear();

или setText как Пустой, используя этот код ниже editText.setText(");

0 голосов
/ 03 марта 2017

Я использовал это для вложенного LinearLayout, чтобы очистить EditTexts и RadioButtons

// метод очищен частный очистить пустоту (группа ViewGroup) { 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 голосов
/ 20 января 2016

В моем случае я сделал это.

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 голосов
/ 11 июня 2015
   // Update answer

private void clearEditTextGroup(ViewGroup group){


    for(int i=0 ; i< group.getChildCount(); i++){
    View view = group.getChildAt(i);
    if(view instanceof EditText){

    // use one of clear code
    }

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

    }


   }

используйте один из этих кодов, чтобы очистить ваш текст редактирования

edittext.getText().clear();

или

edittext.setText(null);

или

edittext.setText("");
...