#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()
. Я не спрашиваю, как или где я могу программно изменить его.