活动用户从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);
答案 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);
}
});
}
}
}