在Fragment中使用overridePendingTransition报错,求技术解决方案
在Fragment中使用overridePendingTransition的正确姿势
嘿,我一眼就看出问题所在了——你直接在Fragment里调用overridePendingTransition()肯定会出错,因为这个方法是Activity类的成员方法,Fragment本身并没有实现这个方法,直接调用自然会报找不到方法的错误。
问题根源
你当前的代码里,在Fragment的点击事件回调中直接调用overridePendingTransition(),而当前的执行上下文是Fragment实例,编译器找不到这个方法,运行时也会抛出异常。
解决方案1:通过getActivity()调用Activity的方法
最直接的修复方式是先获取当前Fragment依附的Activity实例,再调用它的overridePendingTransition()方法,记得一定要判空,避免Fragment和Activity分离时出现空指针:
med = (LinearLayout) getView().findViewById(R.id.second); med.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(getContext(), SecondActivity.class); i.putExtra("table_name", "questCompFunda"); startActivity(i); // 关键修改:获取Activity实例后调用过渡动画方法 if (getActivity() != null) { getActivity().overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right); } } });
解决方案2:使用ActivityOptions(推荐)
如果你使用的是AndroidX或者较新的Android API,更推荐用ActivityOptions来设置过渡动画,这种方式更灵活,也不需要依赖Activity实例的直接调用:
med = (LinearLayout) getView().findViewById(R.id.second); med.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(getContext(), SecondActivity.class); i.putExtra("table_name", "questCompFunda"); // 创建自定义动画的ActivityOptions ActivityOptions options = ActivityOptions.makeCustomAnimation( requireContext(), // 用requireContext()确保上下文非空,适合确定Fragment已依附的场景 android.R.anim.slide_in_left, android.R.anim.slide_out_right ); startActivity(i, options.toBundle()); } });
注意事项
- 方案1中的
getActivity()可能返回null(比如Fragment已经被销毁但回调还在执行),所以必须加非空判断; - 方案2中的
requireContext()会在上下文为空时抛出异常,适合你确定Fragment处于活跃状态的场景,如果不确定,也可以用getContext()并判空后再使用。
内容的提问来源于stack exchange,提问作者Shan Ch
相关产品推荐
相关产品推荐

