android - Illegalstateexception Fragment 必须是公共静态类才能从实例状态正确重新创建
问题描述
下面是抛出错误消息的代码
“ java.lang.illegal 状态异常:片段必须是公共静态类才能从实例状态正确重新创建”
**compile 'com.google.android.gms:play-services-ads:11.8.0'
只有在我将** 包含在 build.gradle 文件中之后,以下代码片段才会引发错误,否则工作正常。
public void selectDate(View view) {
DialogFragment newFragment = new SelectDateFragment();
newFragment.show(getFragmentManager(), "DatePicker");
}
@SuppressLint("ValidFragment")
public class SelectDateFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Calendar calendar = Calendar.getInstance();
int yy = calendar.get(Calendar.YEAR);
int mm = calendar.get(Calendar.MONTH);
int dd = calendar.get(Calendar.DAY_OF_MONTH);
return new DatePickerDialog(getActivity(), this, yy, mm, dd);
}
解决方案
改变这个:
@SuppressLint("ValidFragment") public class SelectDateFragment ...
对此:
public static class SelectDateFragment ...
这里发生的情况是,Android 框架正试图从保存的实例状态中“重新创建”您的 Fragment,并且只有在许多事情为真的情况下才能做到这一点。需要实现的许多事情之一是您的 Fragment 不需要任何其他东西来实例化,但是所有非静态内部类都“需要”外部类的封闭实例才能被实例化.
如果将static
关键字添加到 Fragment 的类定义会导致其他问题,则必须单独解决这些问题。也许您的封闭 Activity 类有一个您要调用的方法;你可以替换例如
someActivityCall();
和
MyActivity activity = (MyActivity) getActivity();
activity.someActivityCall();
推荐阅读
- python - 检查 Pyspark DataFrame 中的约束
- lua - 为什么这个 lua 函数正在修改它不应该修改的表?
- html - 在nodejs中使用bcrypt登录
- javascript - 隐藏和显示 html 表格列
- python-3.x - 如何使用公共 DNS 或 IP 地址将值传递给 EC2 实例中的 Flask 应用程序?
- python - 在 python Pygame 中为 Pacman 创建队友
- javascript - 如何在 HTML 画布中交换两个画布元素?
- powershell - 如何使用 power shell 更新 json 字符串
- python-3.x - 从 TFRobertaForSequenceClassification 获取错误的 logits 形状
- c++ - JSON后的奇怪字符