2013-08-20 6 views
9

Я осмотрел и нашел пару вопросов с подобной темой, но ничего не помогло в моем случае. Я пытаюсь получить доступ к существующему активному фрагменту, используя getSupportFragmentManager(). FindFragmentByTag (TAG), но он всегда возвращает null. Ответы по подобным вопросам предполагали, что для фиксации требуется некоторое время, поэтому вызов findFragmentByTag возвращает null, если он вызван слишком рано. Я пробовал две вещи:Андроидные фрагменты - findFragmentByTag всегда возвращает null

  • добавить getSupportFragmentManager() executePendingTransactions()
    сразу после фиксации, но все-таки получить нуль..
  • добавил кнопку ... нажав эту кнопку после того, как была создана активность, зарегистрированный фрагмент и отображаемое представление должны оставить для системы достаточно времени для фиксации. Но я все еще получаю null.

Вот моя активность:

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); 
} 

}

Что я здесь делаю неправильно? Приветствия, Max

+1

Вы уверены, что сохраненный объектInstanceState имеет значение null? – njzk2

+1

ft.addToBackStack (F_SETTINGS); <--- это не помещает ваши фрагменты. – bofredo

ответ

20

В своем коде вы не упомянули тег заменить метод Итак,
Используйте эту структуру замены метода фрагмента

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

Обратитесь по ссылке для получения дополнительной информации. fragment replace with tag name

+0

О, боже мой, ты не поверишь, как долго я смотрел на код, чтобы понять, что случилось ... спасибо, работает сейчас. – maxdownunder

+0

См. Мой родственный вопрос: http://stackoverflow.com/questions/24833912/refresh-fragment-ui-from-fragmentactivity –

Смежные вопросы