Android 基于碎片的首选项活动的重写PendingTransition

Android 基于碎片的首选项活动的重写PendingTransition,android,preferenceactivity,Android,Preferenceactivity,在我的currenct项目中,我使用自定义动画在活动之间切换,效果很好 但由于每个活动开关都使用了这些动画,因此基于片段的动画看起来有点不合适 我已经尝试覆盖onBuildStartFragmentIntent中的转换(对我来说,这似乎是启动新活动的唯一指标) @Override public Intent onBuildStartFragmentIntent (String fragmentName, Bundle args, int titleRes, int shortTi

在我的currenct项目中,我使用自定义动画在活动之间切换,效果很好

但由于每个活动开关都使用了这些动画,因此基于片段的动画看起来有点不合适

我已经尝试覆盖onBuildStartFragmentIntent中的转换(对我来说,这似乎是启动新活动的唯一指标)

    @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本身。当从另一个Activity打开PreferenceActivity时,它使用的方法与Blundell博客中描述的类似

我的意思是,当PreferenceActivity在一个小屏幕上使用时,它只有一个窗格。当单击标题时,将打开一个新活动。但所有这些行为都由PreferenceActivity处理。如果单击标题并且PreferenceActivity打开一个新活动,我希望使用自定义动画打开这个新屏幕n、 试试这个

onCreate(Bundle savedInstanceState);//Make the most sense
否则试试这些

onRestoreInstanceState(Bundle state);
onNewIntent(Intent intent);
或者重写它们并进行一些日志记录

Log.d("Debug", "onCreate called");
在文档中[此处](,android.os.Bundle,int,int)) 方法

描述如下:

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

这就解释了这种“奇怪”的行为。你可以试试这个。在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);
}
此代码来自首选项活动模板。
希望有帮助:)

您应该在设置内容视图之前创建一次内容视图:如果不是这样,请在问题中添加更多细节,以解释您的尝试。我知道您博客中的方法(实际上这是我用于正常活动的方法)。但是当使用PreferenceActivity更改片段(双窗格视图)或打开新活动时,由PreferenceActivity处理(您只提供作为XML和片段的标题)。因此,没有显式的活动可以重写onCreate方法来放置.overridePendingTransionio(…)。
@Override
public void onBackPressed() {
    super.onBackPressed();
    overridePendingTransition(R.anim.slide_in_left,R.anim.slide_out_right);
}