【问题标题】:Use onBackPressed for fragments对片段使用 onBackPressed
【发布时间】:2016-07-30 15:50:52
【问题描述】:

我必须在返回上一个片段时显示动画,所以我必须使用 onBackPressed 方法。由于它仅在活动中可用,因此我尝试使用参考:

@Override
onBackPressed(){
super.onBackPressed();
infoFragment.onBackButtonPressed();
}

在 InfoFragment 中,我定义了 onBackButtonPressed 方法,但它不起作用。 所以我尝试这样:

view.setFocusableInTouchMode(true);
        view.requestFocus();
        view.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View view, int i, KeyEvent keyEvent) {
                if(i==KeyEvent.KEYCODE_BACK){
                    MainActivity mainActivity=(MainActivity)getActivity();
                    mainActivity.loadMainFragment();
                    return true;
                }
                return false;
            }
        });

那么,为什么它不起作用?

【问题讨论】:

  • 第一种方法应该可以正常工作,但我认为不需要自定义后退按钮侦听器。见stackoverflow.com/questions/10886669/…
  • onBackPressed()属于Activity,不属于Fragment
  • 只需将 setCustomAnimations 与 FragmentTransaction 一起使用。
  • 谢谢@BLACKVVINE 我解决了。

标签: android android-fragments back


【解决方案1】:

如果您想延迟后按事件直到您的自定义动画完成,您应该根据这个 sn-p 重写您的代码。

@Override
public void onBackPressed(){
    infoFragment.onBackButtonPressed(new Runnable(){
        @Override
        public void run(){
            super.onBackPressed();
        }
    });
}

什么是可运行的?

您的onBackButtonPressed 方法应该获取一个可运行对象并在自定义动画结束后运行它。这个runnable用作回调函数。

使用这种方式,您将延迟调用super.onBackPressed(),因此您可以先播放动画,然后将事件转发给您的活动的超类。

我应该什么时候调用它?

对于您的自定义动画,附加一个 animation listener 并在它的 onAnimationEnd 方法中调用该可运行对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多