每当我从当前活动按下向上按钮时,父片段从右边缘向左滑动,这似乎是默认的过渡行为。但我希望父活动能够滑动从左边缘向右。
我已将onBackPressed
与overridePendingTransition
和自定义转换xml文件一起使用,但我的onBackPressed
永远不会被调用。
这是我的java代码。
public class TakeOrderItems extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_take_order_items);
//Get the actionbar to set the back button
ActionBar ab = getSupportActionBar();
ab.setDisplayHomeAsUpEnabled(true);
/*
CODE TO CREATE AND DISPLAY EXPANDABLELISTVIEW
*/
@Override
public void onBackPressed() {
super.onBackPressed();
Log.i("Good","back pressed");
overridePendingTransition(R.transition.slide_in,R.transition.slide_out);
}
XML转换文件
slide_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="-100%"
android:toXDelta="0"
android:duration="200" />
</set>
slide_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="0"
android:toXDelta="100%"
android:duration="200" />
</set>
我已经检查了许多答案,但它们似乎令人困惑和矛盾。我认为必须有一种优雅而有效的方法来实现这一点,因为许多应用程序都使用它。请帮助我。谢谢。
答案 0 :(得分:1)
将overridePendingTransition
置于调用super.onBackPressed()
之上,它必须正常工作
答案 1 :(得分:0)
Up 导航按钮由onOptionsItemSelected
处理。所以覆盖它:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
请注意,此onOptionsItemSelected
实现假定您的父活动已经启动,并且是您的Backstack上的下一个活动。除了完成当前版本之外,您可能还想启动它。
覆盖finish
的{{1}}方法以设置转场:
Activity
此外,您似乎对@Override
public void finish() {
super.finish();
overridePendingTransition(R.anim.slide_in, R.anim.slide_out);
}
方法名称感到困惑。它将动画作为参数,而不是过渡。
这将是您的overridePendingTransition
等效物:
slide_in
<set
xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:fromXDelta="-100%"
android:toXDelta="0%"
android:duration="200"/>
</set>
:
slide_out
只需将这些文件放在<set
xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:fromXDelta="100%"
android:toXDelta="200%"
android:duration="200"/>
</set>
而不是res/anim
。