【问题标题】:Notify onbackpressed() from which fragment was called通知 onbackpressed() 从哪个片段被调用
【发布时间】:2015-01-03 01:31:26
【问题描述】:

我有一个 Activity,我添加了一个 ListFragment。当我单击一个按钮时,一个新的 Fragment 将替换 ListFragment。我使用 addTobackStack(null),所以当我按下后退按钮时,我将结束 ListFragment。如果用户没有按下后退,而是点击了一个按钮,那么他会转到另一个新的 Fragment。从那里我希望用户回到 ListFragment,所以我在进行 fragmentTransaction 时不使用 addTobackStack()。

架构是:

ListFragment -------> GameFragment --------> EndFragment

从GameFragment 我可以回到ListFragment,从EndFragment 我必须回到ListFragment 而不是GameFragment。

所以我猜我必须以某种方式覆盖我的 Activity 中的 onBackPressed() 所以当我在 EndFragment 上与 ListFragment 进行交易时

问题是当我覆盖 onBackPressed() 时,我不知道如何引用 EndFragment

(除非有更好的方法来执行此操作...)

我现在使用的 onBackPressed() 代码:

    @Override
public void onBackPressed() {
    if (getSupportFragmentManager().getBackStackEntryCount() == 0) {
        Log.i("FINISH", "Finish");
        finish();
    } else {
        Log.i("FINISH", "POP STACK");
        getSupportFragmentManager().popBackStack();
    }
}

【问题讨论】:

    标签: android android-fragments


    【解决方案1】:

    执行此操作的更好方法是从 BackStack 中删除您的 AF 活动,这是保存所有先前活动的地方,也是返回按钮查找先前活动的地方。

    为此,在您的 AF 活动中,将 FLAG_ACTIVITY_CLEAR_TOP 标志添加到您的意图中,如下所示:

    Intent intent = new Intent(this, BF.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);
    

    另一个选项是覆盖按下后退按钮时发生的情况。覆盖onBackPressed() 方法:

    @Override
    public void onBackPressed() {
       super.onBackPressed();
       Intent intent = new Intent(this, BF.class);
       goToMainActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       startActivity(goToMainActivity);
     }
    

    【讨论】:

    • 它们不是活动。它们是碎片。很抱歉我的帖子造成了误解,我做了一些修改,以便更容易理解我的要求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多