【问题标题】:Restore View to original xml state将视图恢复到原始 xml 状态
【发布时间】:2014-06-24 09:54:54
【问题描述】:

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

【问题讨论】:

    标签: android view


    【解决方案1】:

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

    在自己的 xml 中定义要还原的视图(我尝试使用 Button,使用可见性、文本、...)

    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" 
    />
    

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

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

    希望对你有帮助...

    【讨论】:

    • 是的.. 没有我希望的那么简单,但是重新膨胀视图很可能是唯一的方法。就我目前的目的而言,这只会让它变得更加复杂,但我可以想象,如果视图发生了太多无法跟踪的变化,这可能是一个好方法。
    【解决方案2】:

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

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

    【讨论】:

    • 我的问题是是否有一种简单的方法可以将视图恢复到其原始 XML 状态,例如 View.reset()。我不是在问如何或在哪里以编程方式更改它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 2023-03-25
    • 2021-09-09
    • 2013-08-29
    • 1970-01-01
    相关资源
    最近更新 更多