findFragmentByTag()始终返回null - Android

时间:2014-11-18 07:12:33

标签: android android-fragments

在我的应用程序中,我有一个主要活动和几个片段。当用户单击后退按钮时,片段逐个弹出。我想确定当前在后栈中的哪个片段。因此用于通过片段标签名称识别片段。我使用下面的代码段来获取片段标记名称,但它总是返回空值。

FragmentManager fm = MainActivity.this.getSupportFragmentManager();
String fragmentTag = fm.getBackStackEntryAt(fm.getBackStackEntryCount() - 1).getName();

请帮忙。

编辑,

用标签替换片段,

FragmentManager fm = MainActivity.this.getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.activity_main_content_fragment, fragment, text);

2 个答案:

答案 0 :(得分:24)

添加/替换TAG时需要提及TAG:

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

OR

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

在BackStack中添加片段为:

ft.addToBackStack("fragment_tag_String");

然后你可以用

重复使用它
getSupportFragmentManager().findFragmentByTag("fragment_tag_String");

参考:

编辑:

执行交易后调用getSupportFragmentManager().executePendingTransactions()

FragmentManager fm = MainActivity.this.getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.activity_main_content_fragment, fragment, text);
ft.commit();
fm.executePendingTransactions();

希望它会帮助你ツ

答案 1 :(得分:11)

我发现了我的错误,我忘记将TAG添加到后台。

FragmentManager fm = mainActivity.getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.activity_main_content_fragment, fragment, text);
ft.addToBackStack(text);

然后我可以获得当前片段TAG名称,如下所示,

FragmentManager fm = MainActivity.this.getSupportFragmentManager();
String currentFragmentTag = fm.getBackStackEntryAt(fm.getBackStackEntryCount() - 1).getName();