2013-08-20 15 views
9

Ho dato un'occhiata in giro e ho trovato un paio di domande con un argomento simile, ma nel mio caso nulla ha aiutato. Sto tentando di accedere a un frammento attivo esistente utilizzando getSupportFragmentManager(). FindFragmentByTag (TAG), ma restituisce sempre null. Le risposte a domande simili suggerivano che ci voleva un po 'prima che il commit fosse eseguito, quindi chiamare findFragmentByTag restituirebbe null se chiamato troppo presto. Ho provato due cose:I frammenti di Android - findFragmentByTag restituisce sempre null

  • aggiungono getSupportFragmentManager() executePendingTransactions()
    subito dopo il commit, ma ancora ottenere nulla..
  • aggiunto un pulsante ... premendo questo dopo che l'attività è stata creata, il frammento registrato e la vista visualizzata dovrebbe lasciare il sistema tempo sufficiente per il commit. Ma ottengo ancora null.

Ecco la mia attività:

public class MainActivity extends ActionBarActivity { 

private static final String F_SETTINGS = "f_settings"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 

    Button btn = (Button) findViewById(R.id.btn); 
    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      debug(); 
     } 
    }); 

    if (savedInstanceState == null) { 
     FSettings newFragment = new FSettings(); 
     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
     ft.replace(R.id.container, newFragment); 
     ft.addToBackStack(F_SETTINGS); 
     ft.commit(); 
     // getSupportFragmentManager().executePendingTransactions(); 
     //// Activating this did not make any difference... 
    } 

    debug(); 
} 

private void debug() { 
    String txt = "null"; 
    Fragment frag = getSupportFragmentManager().findFragmentByTag(F_SETTINGS); 
    if (frag != null) { 
     txt = frag.toString(); 
    } 
    Log.i("Testing", txt); 
} 

}

che cosa sto facendo male qui? Cheers, Max

+1

sei sicuro savedInstanceState è nullo? – njzk2

+1

ft.addToBackStack (F_SETTINGS); <--- questo non codifica i tuoi frammenti. – bofredo

risposta

20

Nel codice non hanno menzionato tag nel metodo replace Così,
utilizzare questa struttura di metodo replace del frammento

ft.replace(R.id.container, newFragment,"fragment_tag_String"); 

consultare questo link per maggiori informazioni. fragment replace with tag name

+0

Oh caro, non crederesti per quanto tempo ho fissato il codice per capire che cosa non va ... grazie, funziona ora. – maxdownunder

+0

Si prega di consultare la mia domanda correlata: http://stackoverflow.com/questions/24833912/refresh-fragment-ui-from-fragmentactivity –

Problemi correlati