【问题标题】: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

【问题讨论】:

    标签: android android-fragments android-activity


    【解决方案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();
    }
    

    【讨论】:

    • 现在我明白你的意思了......我的问题有一点更新(所以请检查一下先生)......无论如何它正在工作......但我有一点问题我必须管理片段菜单返回按钮
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    相关资源
    最近更新 更多