假设我有一个名为PasswordProtectedEditTextPreference的EditTextPreference
子类。在通过EditTextPreference
自己的对话框编辑首选项之前,此子类基本上显示了一个密码对话框。
现在我在相应的preferences.xml中定义首选项,如下所示:
<edu.myproject.pwprefs.PasswordProtectedEditTextPreference android:key="pref_password"
android:title="@string/pref_password_title" android:summary="@string/pref_password_summary"
android:dialogTitle="@string/pref_password_dialog_title" android:dialogMessage="@string/pref_password_dialog_message">
</edu.myproject.pwprefs.PasswordProtectedEditTextPreference>
然后我通过调用
在我的PreferenceActivity
子类中应用preferences.xml
addPreferencesFromResource(R.xml.preferences);
onCreate()
期间。这一切都可以正常使用Android 1.5。但是,当我使用更高版本的Android时,我会得到以下stacktrace:
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{edu.myproject/edu.myproject.Preferences}: android.view.InflateException: Binary XML file line #25: Error inflating class java.lang.reflect.Constructor
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2787)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2803)
at android.app.ActivityThread.access$2300(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2136)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:144)
at android.app.ActivityThread.main(ActivityThread.java:4937)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #25: Error inflating class java.lang.reflect.Constructor
at android.preference.GenericInflater.createItem(GenericInflater.java:397)
at android.preference.GenericInflater.createItemFromTag(GenericInflater.java:430)
at android.preference.GenericInflater.rInflate(GenericInflater.java:481)
at android.preference.GenericInflater.rInflate(GenericInflater.java:493)
at android.preference.GenericInflater.inflate(GenericInflater.java:326)
at android.preference.GenericInflater.inflate(GenericInflater.java:263)
at android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:254)
at android.preference.PreferenceActivity.addPreferencesFromResource(PreferenceActivity.java:268)
at edu.myproject.Preferences.onCreate(Preferences.java:50)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1069)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2751)
... 11 more
Caused by: java.lang.InstantiationException: edu.myproject.pwprefs.PasswordProtectedEditTextPreference
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
at android.preference.GenericInflater.createItem(GenericInflater.java:383)
... 21 more
知道这里发生了什么吗?
来自stacktrace的编辑#25对应于preferences.xml中的PasswordProtectedEditTextPreference
编辑:这是我的PasswordProtectedEditTextPreference:
package edu.myproject.pwprefs;
import edu.myproject.R;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.preference.EditTextPreference;
import android.util.AttributeSet;
import android.view.Gravity;
import android.widget.EditText;
import android.widget.LinearLayout;
public abstract class PasswordProtectedEditTextPreference extends EditTextPreference {
public PasswordProtectedEditTextPreference(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public PasswordProtectedEditTextPreference(Context context,
AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public PasswordProtectedEditTextPreference(Context context,
AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
// further non-instantiation related code
}
答案 0 :(得分:7)
您创建了一个抽象类:
public abstract class PasswordProtectedEditTextPreference
难怪它无法实例化; - )
答案 1 :(得分:4)
通常,这意味着您没有合适的构造函数。确保您的构造函数是公开的,并将Context
和AttributeSet
作为参数:
public TimePreference(Context ctxt, AttributeSet attrs)