如何让片段在 onBackPressed() 杀死它之前做一些动作

How to let Fragment do some action before onBackPressed() kill it

我想知道在 AppCompatActivity 中是否可以做到这一点。我想让 top most FragmentAppCompatActivity super.onBackPressed(); kill 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);
}

您可以尝试将 doSomeActionBeforeBackPressedKillYou() return 设为布尔值

并做

 @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 是由您的 activity class

实现的接口

而在你身上 activity

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

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

使用如下方法创建 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 方法 onFragmentBackPressed() 如果返回 false 或者什么,如果是 - 在退出之前执行一些操作

@Override
public void onBackPressed() {
  if (MyFragment instance if BaseFragment) {
      if (!((BaseFragment) MyFragment).onFragmentBackPressed()) {
          // perform and action
     } else {
        super.onBackPressed();
     }
  } else {
      super.onBackPressed();
  }
}