findFragmentByTag()始终返回null - Android

use*_*832 10 android android-fragments

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

FragmentManager fm = MainActivity.this.getSupportFragmentManager();
String fragmentTag = fm.getBackStackEntryAt(fm.getBackStackEntryCount() - 1).getName();
Run Code Online (Sandbox Code Playgroud)

请帮忙.

编辑,

用标签替换片段,

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

Swe*_*r ツ 26

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

ft.replace(R.id.container, newFragment,"fragment_tag_String");
Run Code Online (Sandbox Code Playgroud)

要么

ft.add(R.id.container, newFragment,"fragment_tag_String");
Run Code Online (Sandbox Code Playgroud)

在BackStack中添加片段为:

ft.addToBackStack("fragment_tag_String");
Run Code Online (Sandbox Code Playgroud)

然后你可以重复使用它

getSupportFragmentManager().findFragmentByTag("fragment_tag_String");
Run Code Online (Sandbox Code Playgroud)

参考:

编辑:

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();
Run Code Online (Sandbox Code Playgroud)

希望它会帮助你ツ

  • 我用第一种方法来替换碎片.但它总是返回null值. (3认同)

use*_*832 11

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

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

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

FragmentManager fm = MainActivity.this.getSupportFragmentManager();
String currentFragmentTag = fm.getBackStackEntryAt(fm.getBackStackEntryCount() - 1).getName();
Run Code Online (Sandbox Code Playgroud)

  • 你不应该调用`addToBackStack()`来使这个调用工作.如果您希望片段管理器_manage_您的片段但在历史上没有替换它,该怎么办?这不应该是正确的答案. (8认同)