2015-08-04 15 views
5

ho questo layout:Frammento non smettere di anteprima della fotocamera

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:background="@color/DeepSkyBlue" 
    tools:context=".MainPreviewActivity" 
    android:weightSum="5"> 

    <FrameLayout 
     android:id="@+id/clean_preview_fragment_container" 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_weight="3"/> 

    <ListView 
     android:layout_height="0dp" 
     android:layout_weight="2" 
     android:layout_width="match_parent" 
     android:id="@+id/lvImageProcessChoices"/> 

</LinearLayout> 

E nella mia attività ho ottenuto questo:

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    if(savedInstanceState != null){ 
     System.out.println("savedInstanceState is NOT null"); 
     return; 
    } 
    CleanPreviewFragment cleanPreviewFragment = new CleanPreviewFragment(); 
    processedPreviewFragment = new ProcessedPreviewFragment(); 

    fragmentTransaction.add(R.id.clean_preview_fragment_container,cleanPreviewFragment); 
    fragmentTransaction.detach(cleanPreviewFragment); 
    fragmentTransaction.replace(R.id.clean_preview_fragment_container, processedPreviewFragment); 
    fragmentTransaction.attach(cleanPreviewFragment); 

    fragmentTransaction.commit(); 

Ora quello che fa, è avviare un'anteprima della fotocamera (sul frammento di anteprima pulito), lo scollega e lo sostituisce con un'altra anteprima, che è la mia anteprima modificata e quindi allegata di nuovo (il frammento di anteprima pulito).

Detach(): consente di scollegare il frammento dall'interfaccia utente. Questo è lo stesso stato di quando viene inserito nello stack posteriore: il frammento viene rimosso dall'interfaccia utente, tuttavia il suo stato viene ancora gestito attivamente dal gestore dei frammenti.

Quindi lo scollego, ma l'anteprima della fotocamera continua ancora?

Perché quando si verifica la sostituzione, posso vedere un'anteprima modificata. È causato dal metodo attach()?

+0

pessimo titolo. –

+0

Il frammento alla fine dovrebbe essere chiamato l'ultima volta prima del comando. Inoltre, non chiamare il metodo addToBackStack se non si desidera tenerlo http://developer.android.com/intl/ko/training/basics/fragments/fragment-ui.html – Want2bExpert

+0

Trovo abbastanza divertente che tutti siano dicendo la stessa cosa e tuttavia la persona che chiede non ha mai risposto. E ... StackOverflow dice sopra "Questa domanda non ha ricevuto abbastanza attenzione". Ironia forse? –

risposta

3

Il frammento desiderato alla fine deve essere chiamato l'ultima volta prima del comando. Inoltre, non chiamare il metodo addToBackStack se non si desidera mantenerlo developer.android.com/intl/ko/training/basics/fragments/

2

Perché si sostituisce il frammento e quindi si collega il frammento staccato?

penso che si dovrebbe fare in questo modo:

fragmentTransaction.add(R.id.clean_preview_fragment_container,cleanPreviewFragment); 
    fragmentTransaction.commit(); 
    fragmentTransaction.detach(cleanPreviewFragment); 
    fragmentTransaction.replace(R.id.clean_preview_fragment_container, processedPreviewFragment); 
    fragmentTransaction.commit(); 
2

Detach(): Detach the given fragment from the UI. ma credo che il punto è che avete appena aggiunto cleanPreviewFragment e non ha commesso ancora, quindi cleanPreviewFragment non era nella gerarchia utente ancora, quindi detach e attach non faranno nulla.

Forse questo funziona:

// first, add cleanPreviewFragment to UI 
fragmentTransaction = fragmentManager.beginTransaction(); 
fragmentTransaction.add(R.id.clean_preview_fragment_container,cleanPreviewFragment); 
fragmentTransaction.commit(); 
// then create new transition and do your job 
fragmentTransaction = fragmentManager.beginTransaction(); 
fragmentTransaction.detach(cleanPreviewFragment); 
fragmentTransaction.replace(R.id.clean_preview_fragment_container, processedPreviewFragment); 
fragmentTransaction.attach(cleanPreviewFragment); 

fragmentTransaction.commit(); 
3

Ho avuto lo stesso problema una settimana ago.But Ho risolto questo utilizzando il metodo() .Rimontare.

Prova di seguito e sono sicuro al 100% che il problema verrà risolto.

// Replace whatever is in the fragment_container view with this fragment, 
// and add the transaction to the back stack if needed 
transaction.replace(R.id.fragment_container, newFragment); 
transaction.addToBackStack(null); 

// Commit the transaction 
transaction.commit(); 

questo per il riferimento di codice di cui sopra gentilmente aperto il collegamento sotto

http://developer.android.com/training/basics/fragments/fragment-ui.html

così ora il codice sarà simile

fragmentTransaction.add(R.id.clean_preview_fragment_container,cleanPreviewFragment); 
fragmentTransaction.commit(); 
fragmentTransaction.detach(cleanPreviewFragment); 

fragmentTransaction.replace(R.id.clean_preview_fragment_container, processedPreviewFragment); 
fragmentTransaction.addToBackStack(null); 
fragmentTransaction.commit(); 
Problemi correlati