0

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

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

我已经尝试覆盖 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 的评论之后,我再次阅读了这个问题,我需要更具体。实际上,overridePendingTransition 不起作用的不是 PreferenceActivity 本身。当打开另一个 Activiy 的 PreferenceActivity 时,它正在使用类似于 Blundell 的博客中描述的方法。

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

4

2 回答 2

1

在文档 [这里]( 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,该 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);
}

此代码来自 Preference Activity 模板。希望能帮助到你 :)

于 2017-07-19T14:11:40.193 回答
0

尝试这个?

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

否则试试这些?

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

或者全部覆盖它们并做一些日志记录

Log.d("Debug", "onCreate called");
于 2012-06-06T12:09:35.103 回答