Восстановить представление в исходное состояние xml

#android #view

#Android #Вид

Вопрос:

Есть ли в 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>
  

Теперь программно для видимости установлено значение visible, пользователь вводит в него текст, устанавливается ошибка .setError , и теперь я хочу просто вернуть представление в исходное состояние, без необходимости явно выполнять:

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

Ответ №1:

Я не знаю, сочтете ли вы это простым способом, но я попробовал следующее.

Определите представление, которое вы хотите вернуть, в своем собственном xml (я пробовал с помощью кнопки, играя с видимостью, текстом, …)

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. Да .. не так просто, как хотелось бы, но вполне возможно, что повторное раздувание представления — единственный способ сделать это. Для моей текущей цели это только усложнило бы задачу, но я могу представить, что это может быть хорошим подходом, если в представлении так много изменений, что их невозможно отследить.

Ответ №2:

Я не смог четко понять ваш вопрос. В любом случае, я отвечаю, напишите условие в Onresume(), чтобы отменить вашу операцию.

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

Комментарии:

1. Мой вопрос заключается в том, существует ли простой способ вернуть представление в исходное состояние XML, что-то вроде View.reset() . Я не спрашиваю, как или где я могу программно изменить его.