- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个Fragment
(它不是内部类,也没有任何构造函数)
public class PreferenceListFragment extends ListFragment implements OnClickListener
我在 Android Developer Console 上收到此崩溃报告:
java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.redacted.redacted/com.redacted.redacted.PreferenceActivity}:
android.support.v4.app.Fragment$InstantiationException:
Unable to instantiate fragment com.redacted.redacted.PreferenceListFragment$3:
make sure class name exists, is public, and has an empty constructor that is
public
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1750)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1766)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:2960)
at android.app.ActivityThread.access$1600(ActivityThread.java:127)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:945)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3818)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:875)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:633)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.support.v4.app.Fragment$InstantiationException:
Unable to instantiate fragment com.redacted.redacted.PreferenceListFragment$3:
make sure class name exists, is public, and has an empty constructor that
is public
at android.support.v4.app.Fragment.instantiate(Fragment.java:399)
at android.support.v4.app.FragmentState.instantiate(Fragment.java:97)
at android.support.v4.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:1760)
at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:200)
at com.redacted.redacted.PreferenceActivity.onCreate(PreferenceActivity.java:37)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1710)
... 12 more
Caused by: java.lang.InstantiationException:
com.redacted.redacted.PreferenceListFragment$3
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1409)
at android.support.v4.app.Fragment.instantiate(Fragment.java:388)
... 18 more
我无法在我的任何测试设备上复制它。
这是发生异常的PreferenceActivity.onCreate
:
public class PreferenceActivity extends FragmentActivity{
PreferenceListFragment frag;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.preference);
frag = (PreferenceListFragment) getSupportFragmentManager().
findFragmentById(R.id.preference_list_frag);
frag.setState(AlarmPreferenceState.Selected);
frag.setIsTwoPane(false);
}
.
.
.
}
这里是R.layout.preference
:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment class="com.redacted.redacted.PreferenceListFragment"
android:id="@+id/preference_list_frag"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
任何人都知道为什么我可能会收到此异常,和/或如何重现它?
最佳答案
您必须
有一个空的公共(public)构造函数。告诉您不要使用 fragment 构造函数的人会将您引向错误的方向。
他们可能告诉过你的是,不要有接受参数的构造函数,因为在重新创建 fragment 时系统可能不会调用这些参数。在这种情况下,请使用文档中的示例为您的 fragment 提供参数。
引用自文档:
All subclasses of Fragment must include a public empty constructor. The framework will often re-instantiate a fragment class when needed, in particular during state restore, and needs to be able to find this constructor to instantiate it. If the empty constructor is not available, a runtime exception will occur in some cases during state restore. [1], [2]
[1] : https://developer.android.com/reference/android/app/Fragment.html
[2]:https://developer.android.com/reference/android/app/Fragment.html#Fragment()
关于带有 fragment 的 Android InstantiationException(它是公开的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14031110/
这是我第一次编写 JUnit 测试,遇到了以下问题。我必须为抽象类编写测试,有人告诉我这样做: http://marcovaltas.com/2011/09/23/abstract-class-tes
我编写了以下类,类中的其余代码是@Overrides,请告诉我其余代码是否与此处相关,我将添加它。 public class ListCmd extends LibraryCommand {
我有一个 InstantiationException,我在这里搜索了其他答案和问题,但找不到与我的问题相关的任何内容。该应用程序在 MainActivity 上崩溃,查看 logcat,它给出了一个
我还没有完成这个应用程序,但我希望在我的手机上看到它的样子。但是,它会强制关闭并引发 InstantiationException。 logcat 异常: 09-19 20:13:47.987: D/
我正在尝试做一个服务示例程序,但出现以下异常 09-10 20:57:57.871: E/AndroidRuntime(280): FATAL EXCEPTION: main 09-10 20:57:
从 hibernate 中获取对象时出现问题。堆栈跟踪是: org.hibernate.InstantiationException: Could not instantiate entity: ma
我有一个项目实体(如下所示)。当我尝试改变 var fullName: String?= null 至: var fullName: String, 我突然从Hibernate收到Instantiat
我这里有一个小问题,需要我一些意见。 这是一个和平的代码 @XmlRootElement public abstract class Article { // quert params and
我正在尝试向我的代码添加异常,以便每当 securityManager 返回 false 时都会引发异常: public Appointment(String date,String time) {
我写了自己的客户转换器: public class MyFancyCustomConverter extends DozerConverter { public MyFancyCustomCo
当我尝试启动 IntentService 时收到 InstantiationException。我在这里查看了其他线程,但答案并没有解决我的问题。我的服务类确实有一个默认构造函数。这是我的服务类。 (
我的理解是,已检查的异常是可以合理预期调用者可以从中恢复的异常。我不明白为什么 InstantiationException 会出现这种情况。如果无法实例化一个类,那么调用者应该做什么? 然后我认为代
我无法创建 B 对象,但为什么? public class AFactory { public int currentRange; private abstract class A {
这个问题在这里已经有了答案: newInstance() with inner classes (3 个答案) 关闭 5 年前。 看下面的代码: public class Outer { p
这个问题在这里已经有了答案: 关闭 9 年前。 Possible Duplicate: Android RuntimeException: Unable to instantiate the serv
我正在尝试在hadoop文件系统上运行我的jar,但遇到此异常 See image 如果我从eclipse运行,我的代码将成功运行。 这是我的亚军主类 public class ReadCas
我想创建一个包含实体的模拟。可以有两种实体:复杂实体和简单实体。当我实例化一个简单的模拟时,我希望实例化简单的实体,当我实例化一个复杂的模拟时,我希望实例化复杂的实体。 实体: class Compl
这个问题已经有答案了: How to instantiate an inner class with reflection in Java? (2 个回答) 已关闭 8 年前。 我正在学习 Java
A.我想使用如下所示的 AlertDialogBox 匿名类创建 Popup: private void showPopupChangeCurrency(final CharSequence[] it
这个问题已经有答案了: Can I use Class.newInstance() with constructor arguments? (9 个回答) 已关闭 6 年前。 我有两个流程,如下所示。
我是一名优秀的程序员,十分优秀!