Android 使用“清除”按钮清除多个编辑文本字段

Android 使用“清除”按钮清除多个编辑文本字段,android,android-layout,android-intent,Android,Android Layout,Android Intent,我已经研究了关于这个问题的其他问题,但解决方案对我来说并不适用。我有一个页面上的编辑文本字段的数量,并希望能够重置一个按钮按下他们。我从中实现了解决方案,但我有嵌套的线性布局,它只清除作为主容器直接子容器的edittext。我如何让它找到所有edittext字段,或者我必须引用每个字段 我的xml文件结构如下: <ScrollView> <LinearLayout android:id="@+id/MainParent"> <LinearLa

我已经研究了关于这个问题的其他问题,但解决方案对我来说并不适用。我有一个页面上的编辑文本字段的数量,并希望能够重置一个按钮按下他们。我从中实现了解决方案,但我有嵌套的线性布局,它只清除作为主容器直接子容器的edittext。我如何让它找到所有edittext字段,或者我必须引用每个字段

我的xml文件结构如下:

<ScrollView>
    <LinearLayout android:id="@+id/MainParent">
        <LinearLayout>
            TextView
            EditText
        </LinearLayout>
        <LinearLayout>
            TextView
            EditText
        </LinearLayout>
        <LinearLayout>
            TextView
            EditText
        </LinearLayout>
        EditText
        <LinearLayout>
            Button1
            Button2
        </LinearLayout>
    </LinearLayout>
</ScrollView>

文本框
编辑文本
文本框
编辑文本
文本框
编辑文本
编辑文本
按钮1
按钮2
Java文件中的代码段:

ViewGroup group = (ViewGroup)findViewById(R.id.MainParent);
       for (int i = 0, count = group.getChildCount(); i < count; ++i) {
           View view = group.getChildAt(i);
               if (view instanceof EditText) {
                   ((EditText)view).setText("");
       }
ViewGroup group=(ViewGroup)findViewById(R.id.MainParent);
for(int i=0,count=group.getChildCount();i
单击任何操作后,执行以下步骤:

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

单击任何操作后,执行以下步骤:

EditText firstEditText = (EditText) findViewById(R.id.yoursXmlId);
firstEditText.setText("");
LinearLayout组=(LinearLayout)findViewById(R.id.MainParent);
for(int i=0,count=group.getChildCount();i
LinearLayout组=(LinearLayout)findViewById(R.id.MainParent);
for(int i=0,count=group.getChildCount();i
如果您对引用每个EditText不感兴趣,我会创建一个递归函数来处理层次结构

public void clearAll(ViewGroup root) {
    for (int i = 0, j = root.getChildCount(); i < j, i++) {
        View view = root.getChildAt(i);
        if (view instanceof ViewGroup) {
            clearAll((ViewGroup) view);
            continue;
        }
        if (view instanceof EditText) {
            ((EditText) view).setText("");
            continue;
        }
    }
}

如果您对具体引用每个EditText不感兴趣,我将创建一个递归函数来处理层次结构

public void clearAll(ViewGroup root) {
    for (int i = 0, j = root.getChildCount(); i < j, i++) {
        View view = root.getChildAt(i);
        if (view instanceof ViewGroup) {
            clearAll((ViewGroup) view);
            continue;
        }
        if (view instanceof EditText) {
            ((EditText) view).setText("");
            continue;
        }
    }
}

不过,我必须为每个edittext字段重复此代码。有没有办法避免这样做?您只需在onCreate()中声明edittext一次方法,并在所有编辑文本中设置空白文本中的一个函数,并在需要时调用该函数。我感觉您不想特别引用每个EditText。@nEx.Software您是正确的。我尝试了此解决方案的各种实现,我必须引用每个EditText。此答案不正确,我很抱歉您有什么建议吗?我必须为每个edittext字段重复此代码。有没有办法避免这样做?您必须在onCreate()中只声明一次edittext方法,并在所有编辑文本中设置空白文本中的一个函数,并在需要时调用该函数。我感觉您不想特别引用每个EditText。@nEx.Software您是正确的。我尝试了此解决方案的各种实现,我必须引用每个EditText。此答案不正确,我很抱歉你有什么建议吗?类似于下面希拉格·拉瓦尔的回答,我知道我错在哪里了。谢谢你,这不起作用,它仍然只是清除了编辑文本,这是一个主要父母的直系子女。类似于下面希拉格·拉瓦尔的回答,我知道我错在哪里了。谢谢你,这不起作用,它仍然很清楚是MainParent的直接子级的edittext