将View恢复到原始xml状态

时间:2014-06-24 09:54:55

标签: android view

在Android中,是否有一种简单的方法可以将视图恢复到xml中定义的状态?

例如,我在xml中有这个视图:

<EditText
    android:id="@+id/set_text"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="text"
    android:ems="10"
    android:visibility="gone" >
</EditText>

现在以编程方式,可见性设置为可见,用户在其中输入文本,使用.setError设置错误,现在我只想将视图恢复为原始状态,而无需显式执行:

 view.setVisibility(View.GONE);
 view.setText("");
 view.setError(null);

2 个答案:

答案 0 :(得分:4)

我不知道你是否会认为这是一个简单的方法,但我尝试了以下内容。

定义要在其自己的xml中恢复的视图(我尝试使用Button,使用visibilty,text,...)

button.xml

<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/adminUser2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp"
    android:layout_marginTop="10dp"
    android:text="@string/admin_user" />

然后在主布局中定义插入点

<LinearLayout
    android:id="@+id/buttonInsertLayout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp" 
/>

在您的活动中,使用inflater将视图加载到插入点

private Button admin;

@Override
protected void onResume() {
    super.onResume();
    admin = (Button)View.inflate(UserLoggin.this, R.layout.button, null);
    ViewGroup insert = (ViewGroup)findViewById(R.id.buttonInsertLayout);
    insert.addView(admin);
    // ...
}

稍后在reset()方法中,您可以根据xml内容对视图的新实例进行充气,并将修改过的实例替换为新的实例。

public void resetView() {
    ViewGroup parent = (ViewGroup)admin.getParent();
    int index = parent.indexOfChild(admin);
    parent.removeViewAt(index);
    // Inflate a fresh new View corresponding to the initial state of the view
    Button adminSave = (Button)View.inflate(UserLoggin.this, R.layout.button, null);
    parent.addView(adminSave, index);
}

希望它有所帮助...

答案 1 :(得分:-1)

我无法清楚地理解你的问题。无论如何我正在回答,在Onresume()中写下条件以恢复你的操作。

 Onresume(){
//write the condition
//do something for your view
super.onResume();
    }