1

每当我从当前的活动中按下向上按钮时,父级片段从右边缘向左滑动,这似乎是默认的转换行为。但是我希望父活动从左边向右滑动。按下向上按钮时的自定义活动转换

我已经使用onBackPressedoverridePendingTransition和自定义过渡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> 

我检查了很多答案,但他们似乎是混乱和contradictory.I思考必须有一个优雅和有效的方法来实现这一点,因为许多应用程序使用this.Please请帮助我。谢谢。

+0

你可以试试这个, @覆盖 公共布尔的onkeydown(INT的keyCode,KeyEvent的事件){ 如果(event.getKeyCode()== KeyEvent.ACTION_DOWN){ } 回报super.onKeyDown(的keyCode,事件); } – Vadivel

+0

@Vadivel我不明白这段代码应该做什么,请你解释一下。 –

回答

0

向上导航按钮由onOptionsItemSelected处理。因此其覆盖:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      finish(); 
      return true; 
    } 

    return super.onOptionsItemSelected(item); 
}

注意,这onOptionsItemSelected实现假定你的父母活动已经启动,并在你的堆栈中的下一个。除了完成当前的任务之外,您还可能想要启动它。

覆盖你Activityfinish方法来设置过渡:

@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而不是res/transition

+0

你能解释一下,如何创建anim.slide_in? –

+0

@SivaPrakash当然,我编辑了答案。 –

+0

Thanks.But完成也不叫。我用日志检查它。 –

1

overridePendingTransition以上调用super.onBackPressed()它必须努力

+0

不,它不起作用。该方法未被调用。 –