基于Fragment的Preference活动的OverridePendingTransition

时间:2012-06-06 11:43:42

标签: android preferenceactivity

在我的电流项目中,我正在使用自定义动画在可正常工作的活动之间切换。

但由于这个动画用于每个活动开关,我的基于PreferenceActivity的片段看起来有点不合适。

我已经尝试覆盖onBuildStartFragmentIntent中的Transition(这对我来说似乎是新活动开始的唯一指标。

    @Override
    public Intent onBuildStartFragmentIntent (String fragmentName, Bundle args, int titleRes, int shortTitleRes) {
        this.overridePendingTransition(R.anim.slideinleft, R.anim.slideoutleft);
        return super.onBuildStartFragmentIntent(fragmentName, args, titleRes, shortTitleRes);
    }

但这不起作用。

修改 在Blundell的评论之后,我再次阅读了这个问题,我需要更加具体。它实际上不是PreferenceActivity itselfe,其中overridePendingTransition不起作用。当打开PreferenceActivity形成另一个Activiy时,它正在使用类似于Blundell博客描述的方法。

我的意思是,当PreferenceActivity用于小型screns时,它只有一个窗格。然后,当单击标题时,将打开一个新的活动。但所有这些行为都受到PreferenceActivity的影响。如果单击标题并且PreferenceActivity打开一个新的Activity,我想用自定义动画打开这个新屏幕。

2 个答案:

答案 0 :(得分:1)

在文档[here](https://developer.android.com/reference/android/preference/PreferenceActivity.html#onBuildStartFragmentIntent(java.lang.String,android.os.Bundle,int,int)) 方法

Intent onBuildStartFragmentIntent (String fragmentName, 
            Bundle args, 
            int titleRes, 
            int shortTitleRes)

描述:

  

在单窗格模式下由startWithFragment(String,Bundle,Fragment,int,int,int)调用,构建一个Intent以启动显示所选片段的新活动。默认实现使用适当的参数构造一个重新启动当前活动的Intent以显示片段。

这就解释了“怪异”的行为。你可以试试这个。在PreferenceActivity中覆盖这样的方法。这会触发每个片段切换的自定义动画。

@Override
protected boolean isValidFragment(String fragmentName) {
    overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_left);

    //return true value for valid fragments 

    return PreferenceFragment.class.getName().equals(fragmentName)
            || GeneralPreferenceFragment.class.getName().equals(fragmentName)
            || DataSyncPreferenceFragment.class.getName().equals(fragmentName)
            || NotificationPreferenceFragment.class.getName().equals(fragmentName);
}

当然,您可以单独设置背景动画。

@Override
public void onBackPressed() {
    super.onBackPressed();
    overridePendingTransition(R.anim.slide_in_left,R.anim.slide_out_right);
}

此代码来自“首选项活动”模板。 希望它有所帮助:)

答案 1 :(得分:0)

试试这个?

onCreate(Bundle savedInstanceState);//Make the most sense

否则试试这些?

onRestoreInstanceState(Bundle state);
onNewIntent(Intent intent);

或者全部覆盖它们并进行一些记录

Log.d("Debug", "onCreate called");