19

ho cambiato il locale della mia applicazione programmazione, come segue:E 'possibile aggiornare la vista di un frammento

Resources res = context.getResources(); 

DisplayMetrics dm = res.getDisplayMetrics(); 
android.content.res.Configuration conf = res.getConfiguration(); 
conf.locale = new Locale("cn"); 
res.updateConfiguration(conf, dm); 

Dopo questo, vorrei aggiornare vista del mio frammento attualmente visualizzato al mostra con le nuove impostazioni locali.

Così, in primo luogo ottengo il frammento corrente (che è la più recente in backstack):

Dopo ottengo il frammento attualmente mostrando, vorrei aggiornare sua vista, ma come per farlo? E 'possibile in Android aggiornare la vista di un frammento

+0

cosa si intende invalidare la vista? – Blackbelt

+0

@blackbelt, No, intendo l'aggiornamento, proprio come funziona su una pagina Web, se si seleziona una lingua da una pagina Web, la pagina viene aggiornata. –

risposta

2

È possibile creare un listener, che verrà chiamato quando le impostazioni internazionali cambiano. Questo rimuoverà il frammento e aggiungerà nuovamente il frammento. La tua nuova localizzazione dovrebbe essere selezionata.

+3

Dove dovrebbe essere creato l'ascoltatore? puoi per favore essere più specifico su come farlo? –

+0

Crea la tua interfaccia personale, che la tua attività implementa. Quindi registra il listener con il tuo frammento in onAttach(). Quando cambi le impostazioni internazionali, chiama il metodo nell'interfaccia e rimuovi/re-aggiungi il frammento – Mimminito

35

Si può semplicemente staccare e attaccare frammento, come di seguito

Fragment currentFragment = getFragmentManager().findFragmentByTag("FRAGMENT"); 
    FragmentTransaction fragTransaction = getFragmentManager().beginTransaction(); 
    fragTransaction.detach(currentFragment); 
    fragTransaction.attach(currentFragment); 
    fragTransaction.commit(); 

Ciò aggiornare la visualizzazione e locale cambierà

+0

Ma come posso inviare alcuni dati al frammento? Adesso sto ottenendo una vista vuota. –

+0

Come si inviano i dati al frammento? Dovresti usare fragment.setArguments (Bundle extras); metodo per passare i dati. e quando si aggiorna il frammento i dati verranno mantenuti in modo da non avere alcun problema. –

+0

sì lo faccio ma il ciclo di vita di Frammento non viene chiamato per la classe MyFragment. –

Problemi correlati