使用finishAfterTransition完成活动后,onclick不会被调用

时间:2017-09-25 09:31:53

标签: android onclick onbackpressed

活动用户从A A 进入活动 B ,点击A中的 launchB 再次点击&上的后退按钮转到 A
现在 A 的同一个按钮的onclick在这种情况下没有被调用&其他按钮点击即被调用,除了 launchB !,这很奇怪。 我正在寻找顺畅的体验。

活动 B onBackPressed:

    @Override
        public void onBackPressed() {

    for (int i = 0; i < rowContainer.getChildCount(); i++) {

            View rowView = rowContainer.getChildAt(i);
                    rowView.animate()
                            .setStartDelay(i * SCALE_DELAY)
                            .scaleX(0).scaleY(0)
                            .setListener(new AnimatorAdapter() {

                                @Override
                                public void onAnimationEnd(Animator animation) {

                                    @Override
                            public void onAnimationEnd(Animator animation) {

                                super.onAnimationEnd(animation);

                                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                                        activity.finishAfterTransition();
                                    }
                                }

                            });

}

        overridePendingTransition(R.anim.enter, R.anim.exit);

       return;
        }


我错过了什么吗?

launchB onclick():

Intent intent = new Intent(A.this, B.class);
        intent.putExtra(AppConstants.DATA, getData());
        startActivity(intent);
        overridePendingTransition(R.anim.in, R.anim.out);

1 个答案:

答案 0 :(得分:0)

通常在android中,onBackpressed方法不应该被覆盖,因为在backPress中由android系统本身处理。活动的移动,在backpress上从bacstack弹出fraagments是android系统本身的处理程序。移动代码activity.finishAfterTransition()并调用删除第二个活动的超级方法。

像这样更改你的代码

  @Override
    public void onBackPressed() {
    super.onBackPressed();
    overridePendingTransition(R.anim.enter, R.anim.exit);

    for (int i = 0; i < rowContainer.getChildCount(); i++) {
        View rowView = rowContainer.getChildAt(i);
        rowView.animate()
                .setStartDelay(i * SCALE_DELAY)
                .scaleX(0).scaleY(0)
                .setListener(new AnimatorAdapter() {
                    @Override
                    public void onAnimationEnd(Animator animation) {
                        @Override
                        public void onAnimationEnd(Animator animation) {
                            super.onAnimationEnd(animation);
                        }

                    });

                }
        }
    }

修改: 在onBackPress中使用时,活动overridePendingTransition()不会给出所需的结果。相反,你必须在活动B的onfinish中添加代码。

 @Override
public void finish() {
    super.finish();
    overridePendingTransition(R.anim.enter, R.anim.exit);

    for (int i = 0; i < rowContainer.getChildCount(); i++) {
        View rowView = rowContainer.getChildAt(i);
        rowView.animate()
                .setStartDelay(i * SCALE_DELAY)
                .scaleX(0).scaleY(0)
                .setListener(new AnimatorAdapter() {
                    @Override
                    public void onAnimationEnd(Animator animation) {
                        @Override
                        public void onAnimationEnd (Animator animation){
                            super.onAnimationEnd(animation);
                        }

                    });
                }
    }
}