Domanda

Ciao Sto lavorando con un cercapersone vista e frammenti. Desidero sovrascrivere orientamento cambia così che il metodo onCreateView non viene eseguito ogni volta che cambia l'orientamento. Questo è perché un sacco viene eseguito in onCreateView per la mia app che fa sì che l'orientamento ad essere lenta ai cambiamenti. Anche le cose sul mio server sono controllati e che cosa non troppo quindi non c'è davvero alcun motivo per tutto questo a correre solo perché l'orientamento è cambiato.

Ecco quello che ho creato finora

Ho questo sulla MainActivity nel manifesto

 android:configChanges="orientation|keyboardHidden"

E poi sto usando questo nel mio frammento

@Override
public void onConfigurationChanged(Configuration newConfig) {
  super.onConfigurationChanged(newConfig);
    getLayoutInflater(getArguments()).inflate(R.layout.main, null, false);
    Toast.makeText(getActivity(), "changed orientation", Toast.LENGTH_LONG).show();
}

Quando eseguo l'applicazione e l'interruttore di orientamento vedo lo spettacolo brindisi ma il layout non cambia mai a quella del paesaggio. Così ho deciso che forse Android non era riconoscendo che era nel paesaggio da quando overrided, ma cambiando il layout per qualcosa di ridicolo come un layout per una finestra di dialogo non causa una stretta forza o nulla rimane il layout verticale che si estendeva di conseguenza quindi so che c'è qualcosa di sbagliato in come sto gonfiando il layout.

Qualsiasi aiuto sulla modifica del layout quando viene cambiato l'orientamento in un viewpager sarebbe molto apprezzato.

Grazie!

È stato utile?

Soluzione

1) Si dovrebbe mettere tutte le routine di controllo del server e altre operazioni una tantum a Frammento onCreate (), non onCreateView (). Se avete bisogno di mostrare una sorta di "Loading ..." schermo mentre i carichi, poi mi consiglia di utilizzare un FragmentActivity per gonfiare un layout con almeno un FrameLayout che contiene un "Loading ..." tipo di grafica. In primo luogo, il FragmentActivity verrà eseguito onCreate (), in cui si gonfierà la vista iniziale prima e poi istanziare il frammento. Mettere il codice di controllo del server nella del frammento onCreate (), e poi gonfiare qualsiasi vista di questo frammento nel metodo la sua onCreateView (). Ecco un esempio da uno dei miei progetti che inizializza un pulsante del microfono, che è davvero un frammento:

<FrameLayout
       android:id="@+id/recorder_mic_fragment"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       />

Quindi, il frammento del microfono è in realtà un'istanza dal seguente codice Java:

// make the Mic button
FragmentManager fragMgr = getFragmentManager();
FragmentTransaction xact = fragMgr.beginTransaction();
if (null == fragMgr.findFragmentByTag(FRAG_TAG)) {
    xact.add(R.id.mic_button_frame, MicFragment.newInstance(queryType), FRAG_TAG).commit();
}

FRAG_TAG è in realtà un nome di tag univoco assegnato alla un'istanza frammento che è diverso dal R.id del frammento. In questo modo, è possibile utilizzare findFragmentByTag () per assicurarsi che i frammenti vengono istanziati correttamente in tutti i luoghi che li necessario.

Si può massaggiare il codice un po ', se stai cercando di Frammenti di carico all'interno di Frammenti, come come la mia applicazione funziona realmente. Se si dispone di un frammento che si gonfia una delle diverse possibili Visualizzazioni, quindi utilizzare un'istruzione if per scegliere l'ID cornice appropriata e designare un FRAG_TAG unico. Vorrei consigliare usando distinta R.id di per ogni FrameLayout si crea per un frammento. (Per esempio, se questo frammento potrebbe gonfiare i diversi punti di vista per info, Hum, e della canzone, quindi i miei nomi dei tag per ogni frammento del microfono sarebbero MetaMicButton , HumMicButton e LyricsMicButton . avevo bisogno di scegliere anche tra le R.id.meta_mic_button_frame e così via.)

2) Quando si desidera passare tra le modalità Paesaggio Ritratto e, è necessario definire diversi layout XML nella cartella res / layout e res / layout_land. (Oppure si potrebbe fare res / layout e res / layout_port se si vuole considerare la modalità paesaggio per essere il default). Si prega di controllare questo link: http://developer.android.com/ guida / temi / risorse / fornire-resources.html # AlternativeResources È possibile definire i layout diversi in base alle dimensioni dello schermo, la lingua, la modalità, la modalità notte, e qualsiasi loro combinazione attraccare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top