【问题标题】:Overriding a parent activity's method from fragment从片段覆盖父活动的方法
【发布时间】:2015-09-22 15:03:18
【问题描述】:

我有一个片段的活动。当用户按下后退按钮时,我正在尝试执行一些代码。我正在尝试在活动类中使用此方法:

@Override
public void onBackPressed() {
    super.onBackPressed();
}

然后我在我的片段中用这段代码覆盖它:

@Override
public void onBackPressed() {
    ((MyActivity)getActivity()).onBackPressed();
    doStuff();
}

我在这里尝试做的是在片段的类中覆盖 onBackPressed 方法,然后让该方法首先在其活动中调用该方法,因为我无法调用 getActivity().super.onBackPressed()片段的 onBackPressed() 方法。我已经尝试过了,但它不起作用。在活动的类中,它很好地覆盖了该方法,但在片段的类中,编译器抱怨片段的 onBackPressed() 方法没有覆盖它的超类中的方法。所以,我的问题是,我怎样才能正确地做到这一点?这可能吗?

我可以解决我的问题的另一种方法是在我的活动中使用完整的 onBackPressed() 方法并让该方法调用我的片段的方法,但我不能这样做,因为我的片段没有 id (它由 FragmentPagerAdapter 生成)。

【问题讨论】:

  • 我已经阅读了大部分答案,但据我所知,没有一个给出我需要的解决方案。我开始认为我正在尝试做的事情是不可能的。我还应该补充一点,当按下后退按钮时,我的程序不会破坏当前片段并转换到另一个片段。我的片段有一个显示图像元素的类,当按下后退按钮时,它会用新元素替换这些元素(所有这些元素都在同一个片段中)。我想我要做的是给我的片段一个标签或一个 ID,然后在我的片段中调用一个方法,该方法将从我的活动中完成工作。

标签: android-activity methods fragment


【解决方案1】:

结果证明解决方案很简单。在活动类中,我创建了一个参考片段。然后我将该片段传递给 FragmentPagerAdapter。回到 onBackPress 方法,我简单地调用了 fragmentreference.methodinfragment()。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 2019-10-23
    • 1970-01-01
    相关资源
    最近更新 更多