在片段之间发送数据而不创建新片段

goo*_*ly2 0 android android-fragments

所以我有一个调用DialogFragment的片段(WifiSetupFragment),而DialogFragment需要将字符串传递回原始片段.我知道要做到这一点,你在活动中有一个接口,将数据发送到原始片段,我已经在做了:

FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.addToBackStack(null);
transaction.replace(R.id.content_frag, WifiSetupFragment.newInstance(password));
transaction.commit();
Run Code Online (Sandbox Code Playgroud)

所以我第一次调用WifiSetupFragment时,我还没有创建一个DialogFragment,因为我没有点击一个项目来打开对话框.我的问题是我应该打电话

WifiSetupFragment.newInstance(null)
Run Code Online (Sandbox Code Playgroud)

并对我的片段中的密码字符串进行空检查?因为除非DialogFragment打开,否则我没有密码,并且它并不总是打开.如果这没有意义,请告诉我,我会尝试更清楚地解释.我想这对我来说似乎很奇怪,因为数据不是经常被传入,所以偶尔会有一个字符串的参数可能只被发送到这个片段.

Mat*_*ych 5

您无需通过活动在这些片段之间进行通信.你可以做什么:

  1. 让你WifiSetupFragment.newInstance()接受没有参数.
  2. 使WifiSetupFragment实现一个新的接口,让我们调用它OnPasswordSuppliedListener.
  3. 创建DialogFragment实例后,将其附加到a getChildFragmentManager()而不是getFragmentManager().
  4. 现在你的DialogFragment子类内部可以WifiSetupFragment通过调用来引用getParentFragment().
  5. 投射getParentFragment()到你的界面,瞧!

注意:我假设你正在使用支持库中的Fragments.否则请注意,API 17中引入了嵌套片段功能.