在我的电流项目中,我正在使用自定义动画在可正常工作的活动之间切换。
但由于这个动画用于每个活动开关,我的基于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,我想用自定义动画打开这个新屏幕。
答案 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");