0

我已经查看了有关此问题的其他问题,但解决方案对我不起作用。我在页面上有许多编辑文本字段,并且希望能够通过一键重置它们。我从这个线程实现了解决方案,但我有嵌套的线性布局,它只清除作为主容器的直接子级的 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>

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("");
       }
4

3 回答 3

4

如果您对具体引用每个 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;
        }
    }
}

然后你只需调用:

clearAll((ViewGroup) findViewById(R.id.MainParent));
于 2012-10-15T13:36:28.537 回答
1

在任何操作的 onClick 之后执行以下步骤:

EditText firstEditText = (EditText) findViewById(R.id.yoursXmlId);
firstEditText.setText("");
于 2012-10-15T13:09:35.057 回答
1
LinearLayout group = (LinearLayout)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("");
       }
于 2012-10-15T13:16:57.237 回答