【问题标题】:How to make DialogFragment call a method inside another Fragment如何让 DialogFragment 调用另一个 Fragment 中的方法
【发布时间】:2016-04-26 19:54:48
【问题描述】:

像往常一样,我有一个选项卡式活动,它通过 viewpager 显示片段。 这个片段有一个列表。

用户的其中一个操作显示了一个对话框片段,以便用户在此列表中插入一个新项目。

我向用户显示带有编辑文本的对话框片段以创建一个新项目。

问题是:如何将此项插入到浏览器的片段列表中?

我可以从任何片段调用 getActivity() 来访问活动,但是如何访问显示在对话框片段后面的另一个片段?

提前致谢。

【问题讨论】:

    标签: android android-fragments android-viewpager android-tabs


    【解决方案1】:

    带有列表项的片段 - FragmentA 对话 - NewItemDialogFragment

    您缺少的方法是setTargetFragment()。在构建NewItemDialogFragment 时,调用此方法,将FragmentA 作为对话的目标片段传递。 稍后,您可以通过在NewItemDialogFragment 中调用getTargetFragment() 来访问FragmentA 实例并将其转换为FragmentA 并添加新创建的项目。

    或者,您可以在FragmentANewItemDialogFragment 之间创建合约接口

    【讨论】:

    • 太棒了。感谢您的回答,我相信这是 android 开发人员的正确方法。
    【解决方案2】:

    听起来您想从对话框片段中获取结果用户在对话框片段编辑文本中插入的内容)并在调用的片段中使用它dialogfragment(作为新项目添加到列表中) - 在这种情况下,selected answer here 解决了这个问题 - 我也认为this Gist 是一个很好的参考资源。 在您的情况下,我还认为像他们在此 Gist 中所做的那样实现某种自定义侦听器/回调是一个好主意。希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      您可以为此使用事件总线。

      http://square.github.io/otto/

      这是一个用法示例:

      Bus bus = new Bus();
      
      bus.post(new AnswerAvailableEvent(42));
      
      @Subscribe public void answerAvailable(AnswerAvailableEvent event) {
          // TODO: React to the event somehow!
      }
      
      bus.register(this); // In order to receive events, a class instance needs to register with the bus.
      

      【讨论】:

      • 谢谢,我想在这个库中,但我想要一些本机解决方案。
      猜你喜欢
      • 2019-07-03
      • 2013-04-20
      • 1970-01-01
      • 2013-10-15
      • 2013-04-20
      • 2020-11-17
      • 1970-01-01
      • 1970-01-01
      • 2019-02-03
      相关资源
      最近更新 更多