2012-11-16 14 views
5

Wiem, że mogę ustawić zawartość widoku w aplikacji dla systemu Android, mówiąc: setContentView (int). Czy istnieje funkcja, dzięki której mogę poznać aktualny widok zawartości? Nie wiem, czy to ma sens, ale czego szukam, to funkcja o nazwie, powiedzmy, getContentView, która zwraca int.Jak uzyskać bieżący widok zawartości w programowaniu Androida?

Idealnie byłoby to wyglądać tak:

setContentView(R.layout.main); // sets the content view to main.xml 
int contentView = getContentView(); // does this function exist? 

Jak to zrobić?

+1

AFAIK, nie można uzyskać widoku treści. A po co ci to? –

Odpowiedz

1

Powołując Any easy, generic way in Android to get the root View of a layout?

tej odpowiedzi i komentarze dać jedną metodę: [Get root view from current activity

findViewById (android.R.id.content)

Biorąc dowolny widok w hierarchii Można również zadzwonić :

view.getRootView()

, aby uzyskać widok główny tej hierarchii.

"Widok dekoracji" można również uzyskać za pomocą getWindow(). GetDecorView(). To jest główny element hierarchii widoku i punkt, w którym jest on dołączony do okna, ale nie jestem pewien, czy chcesz bezpośrednio z nim mieszać.

3

Można to zrobić dokonując setter i getter bieżącego widoku przez id tylko

private int currentViewId = -1; 

    public void setCurrentViewById(int id) 
    { 
     setContentView(id); 
     currentViewId = id; 
    } 

    public int getCurrentViewById() 
    { 
     return currentViewId; 
    } 

A potem w

protected void onCreate(Bundle savedInstanceState) 
{ 
     super.onCreate(savedInstanceState); 
     setCurrentViewById(R.layout.main_layout); 

} 

nadzieję, że to pomaga.

+1

To nie zadziała.super.onCreate() musi być pierwszą linią do wykonania w ramach metody. http://stackoverflow.com/questions/8514405/oncreate-not-called –

+0

Nie ma problemu, jeśli super.onCreate() zostanie wywołana w dowolnej linii. BTW Przeniesię to stwierdzenie za Ciebie. –

1

jeśli masz dwa widoki treści, możesz umieścić znacznik wewnątrz względnego układu każdego z nich. a następnie uzyskać widok według nazwy tagu. jeśli nazwa tagu jest jedynym pragnieniem niż blablabla. Nadzieję, że ta pomoc dla każdego, kto szuka rozwiązania.

1

w działaniu, można wykonać

View rootView = null; 
View currentFocus = getWindow().getCurrentFocus(); 
if (currentFocus != null) 
    rootView = currentFocus.getRootView(); 

Jak opisano powyżej, istnieje również

View decorView = getWindow().getDecorView(); 

jak

View decorView = getWindow().peekDecorView(); 

Różnica tych dwóch ostatnich jest peekDecorView() może zwrócić null, jeśli widok dekoracji nie został utworzony t, natomiast getDecorView() utworzy nowy widok dekoracji, jeśli jeszcze nie istnieje (jeszcze). Pierwszy przykład może również zwrócić wartość null, jeśli żaden widok nie jest aktualnie aktywny.

Nie wypróbowałem, czy widok główny i widok dekoracji są tym samym wystąpieniem. Bazując na numerze documentation, zakładam, że tak, i można to łatwo zweryfikować za pomocą kilku linii kodu.

Powiązane problemy