首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >片断按后退按钮

片断按后退按钮
EN

Stack Overflow用户
提问于 2013-09-12 12:47:56
回答 12查看 132.7K关注 0票数 44

我现在有一个包含片段的活动

1、2、3、4

如果按下按钮,3,则可以重定向到4

我想实现后退按钮,如下所示。

当按回4时,它返回到3

当按回3时,它返回到2

当按回1时,活动结束();

当涉及到当前实现时,它将完成活动,而不是弹出片段。你能告诉我我应该做什么或记住什么吗?

代码语言:javascript
复制
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

    if( keyCode==KeyEvent.KEYCODE_BACK) 
    {   

        finish();
    }       

        return super.onKeyDown(keyCode, event); 

}   
EN

回答 12

Stack Overflow用户

发布于 2014-02-08 02:53:01

这对我很有效。

当您从activity调用新片段时,-Add .addToBackStack(null)。

代码语言:javascript
复制
    FragmentTransaction mFragmentTransaction = getFragmentManager()
                .beginTransaction();
    ....
    mFragmentTransaction.addToBackStack(null);

将-Add onBackPressed()添加到您的活动

代码语言:javascript
复制
    @Override
public void onBackPressed() {
    if (getFragmentManager().getBackStackEntryCount() == 0) {
        this.finish();
    } else {
        getFragmentManager().popBackStack();
    }
}
票数 92
EN

Stack Overflow用户

发布于 2013-09-12 13:05:47

你可以使用这个..对我很有效..

当按下back时,片段3似乎没有从视图中删除,所以您必须手动完成!

首先,不要使用replace(),而是分别使用remove和add。replace()似乎不能正常工作。

接下来的部分是重写onKeyDown方法,并在每次按下back按钮时删除当前片段。

代码语言:javascript
复制
 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event)
 {
 if (keyCode == KeyEvent.KEYCODE_BACK)
 {
    if (getSupportFragmentManager().getBackStackEntryCount() == 0)
    {
        this.finish();
        return false;
    }
    else
    {
        getSupportFragmentManager().popBackStack();
        removeCurrentFragment();

        return false;
    }



 }

  return super.onKeyDown(keyCode, event);
 }


public void removeCurrentFragment()
{
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

Fragment currentFrag =  getSupportFragmentManager().findFragmentById(R.id.f_id);
}
票数 8
EN

Stack Overflow用户

发布于 2014-10-01 22:20:19

更好的解决方案可能是遵循一种设计模式,以便back-button按钮事件从活动片段向下传播到主机活动。所以,就像..。如果其中一个活动片段消耗了背压,活动将无法对其执行操作,反之亦然。

一种方法是让所有的片段都扩展一个具有抽象“boolean onBackPressed()”方法的基本片段。

代码语言:javascript
复制
@Override
public boolean onBackPressed() {
   if(some_condition)
      // Do something
      return true; //Back press consumed.
   } else {
      // Back-press not consumed. Let Activity handle it
      return false;
   }
}

跟踪活动中的活动片段,并在它的onBackPressed回调中编写如下代码

代码语言:javascript
复制
@Override
public void onBackPressed() {
   if(!activeFragment.onBackPressed())
      super.onBackPressed();
   }
}

这篇文章详细描述了这种模式。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18755550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档