在片段期间处理返回按钮键

Posted

技术标签:

【中文标题】在片段期间处理返回按钮键【英文标题】:Handle Back Button Key during Fragments 【发布时间】:2017-08-16 14:09:34 【问题描述】:

实际上问题是我只是从导航抽屉加载一个片段(让调用是片段-A)现在片段-A调用一个虚拟活动,虚拟活动加载一个 Fragment-B 比 Fragment-B 调用 Fragment C 而 Fragment-C 调用 Fragment-D..

上图整体:

Fragment-A(call)-->Dummy Activity(load)-->fragment-B(call)-->fragment-C(call)-->fragment-D(call)

现在我有一些关于这个的问题:

实际上Fragment D中有一个按钮,当按钮被调用时我必须回到Fragment-A 现在在片段(B,C&D) 加载期间,我必须处理On Back Pressed.. 意味着如果用户在片段 D 中而不是在后按时,则片段 C 被加载,反之亦然,但是当用户在片段 B 上时,调用 On-back 键而不是片段 A 被加载

注意:

我必须同时处理 Above Back 键或 System Back 键

我知道我必须维护 Fragment Stack 但我怎样才能通过案例一

编辑:

实际上 Fragment-A 是 Activity-(a) 的一部分,而剩下的 Fragmnets(B,C&D) 是 Activity-(X) 的一部分

代码:

回购链接:Code link

【问题讨论】:

【参考方案1】:

上面的场景可以通过下面来解决..

 @Override
    public boolean onOptionsItemSelected(MenuItem item) 
        if (item.getItemId() == android.R.id.home) 
            onBackPressed();
        
        return super.onOptionsItemSelected(item);
    


 @Override
    public void onBackPressed() 
        finish();
    

如果片段D中的按钮被调用,请调用该函数 getActivity().onBackPresses(); 它将完成当前的 Activity..

【讨论】:

请将您的代码发布到github并分享链接@DhruvTyagi @DhruvTyagi 请检查此代表github.com/rajajawahar/Dhruv-FragmentMananger 我检查了它,但是当第二个活动->>第二个片段加载并且我们按返回键时问题仍然存在,所以理想情况下它会转到第二个活动,第一个片段,但它会转到 1Activity 2nd片段【参考方案2】:

你需要在backstack中添加片段如下:-

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.content_frame, fragmentA);
//No need to put fragment A in backstack


ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.content_frame, fragmentB);
ft.addToBackStack(null);


ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.content_frame, fragmentC);
ft.addToBackStack(null);

ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.content_frame, fragmentD);
ft.addToBackStack(null);
ft.commit();

现在,你所有的片段都在 backstack 中,所以如果你在 fragmentD 上按 Back,那么 fragmentC 将显示,在 fragmentC 中按 Back,fragmentB 将显示,在 fragmentB 中按 Back,fragmentA 将显示。

AS,您提到您在 fragmentD 中有一个特殊按钮,按下该按钮应将您带到片段 A,因此在单击该按钮时执行以下代码:-

FragmentManager fm = getActivity().getSupportFragmentManager();
for(int i = 0; i < fm.getBackStackEntryCount(); ++i)     
    fm.popBackStack();

【讨论】:

现在我明白你的意思了......我的问题有一点更新(所以请检查一下先生)......无论如何它正在工作......但我有一点问题我必须管理片段菜单返回按钮

以上是关于在片段期间处理返回按钮键的主要内容,如果未能解决你的问题,请参考以下文章

按一次返回按钮停留在同一个片段上,如果按两次,它将返回到上一个片段

如何在按下单个片段的手动后退按钮时返回上一个片段?

使后退按钮从活动返回到Android中的片段

使用导航架构操作点击返回按钮时如何避免片段重新创建?

如果在 WebView 片段中按下后退按钮,如何返回上一页?

微信小程序 wx.redirectTo返回按钮处理