2014-06-24 14 views
8

Czy w Androidzie można łatwo przywrócić widok do stanu zdefiniowanego w xml?Przywróć widok do oryginalnego stanu xml

Na przykład mam ten widok w 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> 

Teraz programowo, widoczność jest ustawiony jako widoczny, użytkownik wprowadza tekst do niego, błąd zostanie ustawiony z .setError, a teraz chcę po prostu przywróć widok do oryginalnego stanu, bez konieczności wyraźnego:

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

Odpowiedz

0

Nie mogę jasno zrozumieć Twojego pytania. W każdym razie odpowiadam, napisz warunek w Onresume(), aby przywrócić twoją operację.

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

Moje pytanie brzmi, czy istnieje prosty sposób przywrócić Widok do stanu pierwotnego XML, coś w rodzaju 'View.reset()'. Nie pytam, jak lub gdzie mogę programowo go zmienić. – wvdz

3

Nie wiem, czy uznasz to za łatwy sposób, ale spróbowałem następujących rzeczy.

Zdefiniuj widok, który chcesz przywrócić w swoim własnym języku XML (próbowałem z przyciskiem, grając z widoczność pola, tekst, ...)

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

Następnie w głównym układ określić punkt wstawiania

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

W swoim obciążeniem działalnością wgląd punktu wstawiania pomocą 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); 
    // ... 
} 

Później w swojej metodzie resetowania() możesz nadmuchać nową instancję widoku, opartą na treści XML i zastąpić zmodyfikowaną nową.

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

Nadzieja to pomaga ...

+0

Tak ... nie tak łatwo, jak bym chciał, ale jest bardzo możliwe, że ponowne napełnienie widoku jest jedynym sposobem, aby to zrobić. W moim obecnym celu sprawiłoby to tylko, że jest to bardziej skomplikowane, ale mogę sobie wyobrazić, że może to być dobre podejście, jeśli jest tak wiele zmian w opinii, że nie można ich śledzić. – wvdz

Powiązane problemy