【问题标题】:Declared target fragment that does not belong to this FragmentManager声明的不属于这个 FragmentManager 的目标 Fragment
【发布时间】:2021-04-04 15:55:42
【问题描述】:

我有一个简单的设置:

代码:

ActivityHaupt -> FragmentHaupt:

final FragmentHaupt fragment = new FragmentHaupt();
final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
transaction.add(R.id.frameLHaupt, fragment, null);
transaction.disallowAddToBackStack(); 
transaction.commit();

FragmentHaupt -> FragmentViewP:

FragmentViewPfragment2 = new FragmentViewP();
fragment2.setTargetFragment(FragmentHaupt.this, 12); //AppConstant.FRAGMENT_CODE = 12

FragmentManager fragmentManager =  getActivity().getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.addToBackStack(null);
fragmentTransaction.replace(R.id.frameLHaupt, fragment2);
fragmentTransaction.commit();

FragmentViewP-> FragmentAddDriver:

FragmentAddDriver ldf = new FragmentAddDriver ();
Bundle args = new Bundle();
args.putString("firstname", vName.getText().toString());
args.putString("lastname", nName.getText().toString());
args.putString("drivername", dName.getText().toString());
ldf.setArguments(args);

ldf.setTargetFragment(FragmentHaupt.newInstance("firstP","lastP"), 12); 
FragmentManager fragmentManager =  getActivity().getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.addToBackStack(null);
fragmentTransaction.replace(R.id.frameLHaupt, ldf);
fragmentTransaction.commit();

当我尝试打开 FragmentAddDriver 活动时,我收到标题中的错误。问题可能是什么?我总是使用相同的 FragmentManager (getActivity().getSupportFragmentManager)?

我错过了什么?

【问题讨论】:

  • 你为什么要将一个全新的FragmentHaupt 实例传递给setTargetFragment?该新片段不会添加到任何 FraemtManager。
  • @ianhanniballake 由于某种原因片段管理器不允许我使用 h fragmenthaupt.class

标签: android android-fragments android-activity fragmentmanager fragmenttransaction


【解决方案1】:

这里有代码:

ldf.setTargetFragment(FragmentHaupt.newInstance("firstP","lastP"), 12); 

您实际上并没有回到 FragmentHaupt。您正在添加它的一个新实例。

要真正返回,您必须在添加标签时设置标签MainActivity

transaction.add(R.id.frameLHaupt, fragment, "FragmentHaupt");

FragmentViewP 中,您必须使用该标签找到它。

ldf.setTargetFragment(fragmentManager.findFragmentByTag("FragmentHaupt"), 12);

这样你就可以回到那个实例。

【讨论】:

  • 我会在我得到代码时尝试它并让你知道它是否有效,所以我可以将你的答案标记为更正:)
  • 不,它无法正常工作。虽然我在打开 FragmentAddDriver 时没有收到错误,但在使用以下代码时我总是返回到 FragmentViewP 片段:` Intent intent = new Intent(getContext(), FragmentHaupt.class); intent.putExtra("pusyyname", 345); intent.putExtra("pussyadress", "jiii"); getTargetFragment().onActivityResult(121, 12, 意图); getFragmentManager().popBackStack();`
猜你喜欢
  • 1970-01-01
  • 2020-05-21
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
  • 2020-02-06
  • 2021-04-09
相关资源
最近更新 更多