2014-09-02 3 views
0

Я пытаюсь рассказать фрагмент, чтобы изменить видимость определенного вида из активности, но я не знаю, как получить ссылку на этот фрагмент.Альтернатива findFragmentById для получения ссылки на уже открытый фрагмент

Что я нашел

findFragmentById(R.id.asdasd) 

Но мой фрагмент не завышены из макета XML, так он не имеет такой идентификатор (я думаю?)

Так как я могу ссылаться на этот фрагмент в другой путь?

Вот как добавить фрагмент из деятельности:

public void addFragment(Fragment fragment) { 
    String fragmentClassName = ((Object) fragment).getClass().getSimpleName(); 
    FragmentTransaction t = getFragmentManager().beginTransaction(); 
    t.replace(R.id.fragment_container, fragment, fragmentClassName); 
    t.addToBackStack(fragmentClassName); 
    t.commit(); 
+0

вы можете разместить код, где вы показываете свой фрагмент, используя FragmentTrasaction –

+0

сделано. отредактировал мой вопрос –

ответ

1

Поскольку вы уже установили тег в своем фрагменте, вы можете использовать его, чтобы найти фрагмент по его тегу, используя Fragment Manager.

образец:

String fragmentClassName = The_Class_Name_Of_Fragment.getClass().getSimpleName(); 
YourFragment fragment = getFragmentManager().findFragmentByTag(fragmentClassName); 
+0

таким образом? \t \t String фрагментClassName = ((фрагмент GiraffeFragment)) .getClass(). GetSimpleName(); \t \t GiraffeFragmentfragment = (GiraffeFragment) getFragmentManager(). FindFragmentByTag (имя фрагмента); –

+0

@ J.K. удалите фрагмент '((GiraffeFragment))' просто поместите 'GiraffeFragment.getClass(). getSimpleName(); ' –

+0

Я получаю GiraffeFragment.getClass redunderlined и следующее сообщение об ошибке Не удается сделать статическую ссылку на нестатический метод getClass() из типа Object –

-2

Вы должны позвонить findFragmentById(R.id.fragment_container) чтобы сослаться Fragment.

+0

, но у меня есть несколько фрагментов в backstack, как он узнает, какой из них я хочу точно указать –

+0

. Вызывая replace(), вы удаляете старый фрагмент из контейнера и добавляете новый; findFragmentById() вернет этот новый фрагмент. Back stack не имеет к этому никакого отношения, это просто средство автоматического обращения к транзакциям. – Egor

+0

@Egor findFragmentById искать задний стек. – maxbeaudoin

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