在片段期间处理返回按钮键
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();
【讨论】:
现在我明白你的意思了......我的问题有一点更新(所以请检查一下先生)......无论如何它正在工作......但我有一点问题我必须管理片段菜单返回按钮以上是关于在片段期间处理返回按钮键的主要内容,如果未能解决你的问题,请参考以下文章
按一次返回按钮停留在同一个片段上,如果按两次,它将返回到上一个片段