当前位置: 首页 > 知识库问答 >
问题:

如何从另一个片段调用片段的方法?

刁远
2023-03-14

知道TargetFragment现在已被弃用,如何从DialogFragment调用片段的方法?

过去,我可以这样做:

父级碎片

DialogFragment dialog = new DialogFragment();
dialog.setTargetFragment(this, 0);
dialog.show(this.getSupportFragmentManager(), "tag");

对话框碎片

((ParentFragment) this.getTargetFragment()).myMethod();

这不再可能,因为目标碎片现已弃用。

我读到可以使用setFragmentResultListener()传递变量,但是如何从DialogFragment调用ParentFragment.myMethod()方法呢?

共有1个答案

吴飞语
2023-03-14

这是我找到的解决方案

父级碎片

public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.getParentFragmentManager().setFragmentResultListener("result", this, new FragmentResultListener() {
        public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle bundle) {
            String action = bundle.getString("action");
            if (action != null)
                if (action.equals("myMethod"))
                    ParentFragment.this.myMethod();
        }
    });
}

对话框碎片

Bundle result = new Bundle();
result.putString("action", "myMethod");
this.getParentFragmentManager().setFragmentResult("result", result);
 类似资料:
  • 先生/女士,我想使用android JAVA将一个片段回调到另一个片段。我试图找到问题,但没有找到解决方案。若我使用接口,它会向活动发送回调响应,这是我不想要的。非常感谢。

  • 问题内容: 我想从fragmentA调用FragmentB(Class)的方法,我试图通过在fragmentA(class)中创建fragmentb的对象来尝试,但是在这里它不起作用是该类中fragmentA的代码,我有一个方法可以通过FragmentB类的方法 我想称这个为fragmentB的方法 我尝试通过fragmentA方法编写此代码,但出现错误 问题答案: 试试这个解决方案:

  • 问题内容: 我已经尝试了一段时间(同样,在这里搜索),当在其他片段中按下按钮时,它可以帮助我刷新MainFragment中的listView。Sommeone可以解释一下如何使其工作吗? 这是带有函数的MainFragment(我不包括其他函数,因为我看不到它们如何起作用): } 这是另一个片段: } 问题答案: 这段代码最适合我。似乎很容易

  • 这是我完整的logcat: 在Android.support.v4.app.backStackRecord.doaddop(backStackRecord.java:414)在Android.support.v4.app.backStackRecord.replace(backStackRecord.java:449)在Android.support.v4.app.backStackRecord.

  • 在我的中有5个片段(home、settings、newPost、notifications和profile)。 在中,我有一个,其中包含许多post视图,每个post都包含一个“open”按钮,该按钮应该打开一个。问题是,我只能在类和populateItemRows()方法中使用,所以当我不能使用... RecycerViewAdapter:

  • 我试图通过活动中按钮的onclick事件将一个主片段替换为另一个片段,但该片段恰好悬停在主片段上。 这是我的密码