如何让片段在 onBackPressed() 杀死它之前做一些动作
How to let Fragment do some action before onBackPressed() kill it
我想知道在 AppCompatActivity
中是否可以做到这一点。我想让 top most Fragment
在 AppCompatActivity
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();
}
}
我想知道在 AppCompatActivity
中是否可以做到这一点。我想让 top most Fragment
在 AppCompatActivity
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();
}
}