如何让Fragment在onBackPressed()之前执行某些操作

时间:2017-03-18 18:55:04

标签: android onbackpressed

我想知道这是否可以在AppCompatActivity中进行。在Fragment AppCompatActivity杀死super.onBackPressed();

之前,我想让最顶级的Fragment做一些动作

这是代表自己的模型代码:

 @Override
public void onBackPressed() {
  ToppMosteFragment.doSomeActionBeforeBackPressedKillYou();
  final Handler handler = new Handler();
  handler.postDelayed(new Runnable() {
        @Override
        public void run() {
           // this is not working..
           super.onBackPressed();
        }
  }, 1000);
}

2 个答案:

答案 0 :(得分:1)

您可以尝试让doSomeActionBeforeBackPressedKillYou()返回布尔值

并做

 @Override
public void onBackPressed() {
  if(ToppMosteFragment.doSomeActionBeforeBackPressedKillYou()) {
      super.onBackPressed();
  }
}

编辑:

如果您定义了动画,则可以添加一个监听器:

    Animation animation = actionButton.getHideAnimation();

    animation.setAnimationListener(new Animation.AnimationListener(){
        @Override
        public void onAnimationStart(Animation arg0) {
        }           
        @Override
        public void onAnimationRepeat(Animation arg0) {
        }           
        @Override
        public void onAnimationEnd(Animation arg0) {
            listener.onFabAnimationEnd();
        }
    });

    actionButton.setHideAnimation(animation);

listener是一个由您的活动类

实现的接口

在你的活动中

@Override
public void onFabAnimationEnd() {
    super.onBackPressed();
}

答案 1 :(得分:0)

我有一个想法, 这可能是一个普遍的事情 -

使用以下方法创建BaseFragment -

public class BaseFragment extends Fragment {

    public boolean onFragmentBackPressed() {
        return true;
    }
}

MyFragment扩展为BaseFragment

class MyFragment extends BaseFragment {
   // override method
   @Override
    public boolean onFragmentBackPressed() {
        return false;
    }
}

如果MainActivity方法BaseFragment,如果返回false,则检查onFragmentBackPressed()方法@Override public void onBackPressed() { if (MyFragment instance if BaseFragment) { if (!((BaseFragment) MyFragment).onFragmentBackPressed()) { // perform and action } else { super.onBackPressed(); } } else { super.onBackPressed(); } } 如果是,请在退出前执行某些操作

git config --global --remove-section url."git@github.com"