如何调用自定义首选项

时间:2013-11-17 19:59:18

标签: java android xml

您好,我试图调用自定义偏好设置。为什么应用程序崩溃?

当我在preference.xml中设置自定义首选项时,应用程序会在" com.appdev.customprefs.SeekBarPreference"中断。我希望它使用SeekBarPreference.java,我想我需要包含package.SeekBarPreference才能使它工作。

XML /的preferences.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    <com.appdev.customprefs.SeekBarPreference
        android:title="Custom Preference"
        android:key="customPref"
        android:defaultValue="32""/>
</PreferenceScreen>

栈跟踪

  

11-17 20:02:17.920:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:18.100:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:18.100:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:19.080:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:19.080:I / Choreographer(1482):跳过41帧!应用程序可能在其主线程上做了太多工作。   11-17 20:02:19.080:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:19.110:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:19.130:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:19.271:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:19.271:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:19.290:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:19.340:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:19.360:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:19.360:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:19.360:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:19.360:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:19.360:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:19.380:D / gralloc_goldfish(1482):未检测到GPU仿真的仿真器。   11-17 20:02:19.530:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:19.580:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:21.980:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:21.980:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:22.011:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:22.020:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:22.080:D / dalvikvm(1482):GC_FOR_ALLOC释放115K,9%释放2602K / 2836K,暂停39ms,总计42ms   11-17 20:02:22.090:I / dalvikvm-heap(1482):将堆(frag case)增长到3.259MB,用于635812字节分配   11-17 20:02:22.200:D / dalvikvm(1482):GC_FOR_ALLOC释放3K,7%空闲3220K / 3460K,暂停120ms,总计120ms   11-17 20:02:22.470:D / dalvikvm(1482):GC_CONCURRENT释放<1K,7%自由3239K / 3460K,暂停81ms + 130ms,总计266ms   11-17 20:02:22.521:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:22.530:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:22.580:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:22.710:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:22.760:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:22.760:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:22.790:I / Choreographer(1482):跳过67帧!应用程序可能在其主线程上做了太多工作。   11-17 20:02:22.790:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:22.790:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:22.810:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:22.860:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:22.870:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:22.910:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:22.960:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:22.960:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:23.010:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:23.020:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:23.080:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:23.160:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:23.852:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:23.852:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:23.890:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:23.890:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:23.920:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:23.920:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:23.970:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:23.970:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:23.970:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:23.970:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:24.010:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:24.010:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:24.030:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:24.030:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:24.050:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:24.050:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:24.142:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:24.142:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:24.180:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:24.180:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:24.554:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:24.572:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:24.650:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:24.650:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:24.650:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:24.650:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:24.670:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:24.670:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:24.810:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:24.810:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:24.820:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:24.820:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:24.820:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:24.880:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:24.940:W / Trace(1482):来自nativeGetEnabledTags的意外值:0   11-17 20:02:25.410:D / AndroidRuntime(1482):关闭VM   11-17 20:02:25.410:W / dalvikvm(1482):threadid = 1:线程退出未捕获异常(组= 0x40a70930)   11-17 20:02:25.540:E / AndroidRuntime(1482):致命异常:主要   11-17 20:02:25.540:E / AndroidRuntime(1482):java.lang.RuntimeException:无法启动活动ComponentInfo {com.appdev.customprefs / com.appdev.customprefs.preferences}:android.view.InflateException:Binary XML文件行#4:错误输出类com.appdev.customprefs.SeekBarPreference   11-17 20:02:25.540:E / AndroidRuntime(1482):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)   11-17 20:02:25.540:E / AndroidRuntime(1482):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)   11-17 20:02:25.540:E / AndroidRuntime(1482):在android.app.ActivityThread.access $ 600(ActivityThread.java:141)   11-17 20:02:25.540:E / AndroidRuntime(1482):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1234)   11-17 20:02:25.540:E / AndroidRuntime(1482):在android.os.Handler.dispatchMessage(Handler.java:99)   11-17 20:02:25.540:E / AndroidRuntime(1482):在android.os.Looper.loop(Looper.java:137)   11-17 20:02:25.540:E / AndroidRuntime(1482):在android.app.ActivityThread.main(ActivityThread.java:5039)   11-17 20:02:25.540:E / AndroidRuntime(1482):at java.lang.reflect.Method.invokeNative(Native Method)   11-17 20:02:25.540:E / AndroidRuntime(1482):at java.lang.reflect.Method.invoke(Method.java:511)   11-17 20:02:25.540:E / AndroidRuntime(1482):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)   11-17 20:02:25.540:E / AndroidRuntime(1482):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)   11-17 20:02:25.540:E / AndroidRuntime(1482):at dalvik.system.NativeStart.main(Native Method)   11-17 20:02:25.540:E / AndroidRuntime(1482):引起:android.view.InflateException:二进制XML文件行#4:错误扩展类com.appdev.customprefs.SeekBarPreference   11-17 20:02:25.540:E / AndroidRuntime(1482):在android.preference.GenericInflater.createItem(GenericInflater.java:386)   11-17 20:02:25.540:E / AndroidRuntime(1482):在android.preference.GenericInflater.createItemFromTag(GenericInflater.java:430)   11-17 20:02:25.540:E / AndroidRuntime(1482):在android.preference.GenericInflater.rInflate(GenericInflater.java:481)   11-17 20:02:25.540:E / AndroidRuntime(1482):在android.preference.GenericInflater.rInflate(GenericInflater.java:493)   11-17 20:02:25.540:E / AndroidRuntime(1482):在android.preference.GenericInflater.inflate(GenericInflater.java:326)   11-17 20:02:25.540:E / AndroidRuntime(1482):在android.preference.GenericInflater.inflate(GenericInflater.java:263)   11-17 20:02:25.540:E / AndroidRuntime(1482):在android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:269)   11-17 20:02:25.540:E / AndroidRuntime(1482):在android.preference.PreferenceActivity.addPreferencesFromResource(PreferenceActivity.java:1424)   11-17 20:02:25.540:E / AndroidRuntime(1482):at com.appdev.customprefs.preferences.onCreate(preferences.java:12)   11-17 20:02:25.540:E / AndroidRuntime(1482):在android.app.Activity.performCreate(Activity.java:5104)   11-17 20:02:25.540:E / AndroidRuntime(1482):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)   11-17 20:02:25.540:E / AndroidRuntime(1482):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)   11-17 20:02:25.540:E / AndroidRuntime(1482):... 11更多   11-17 20:02:25.540:E / AndroidRuntime(1482):引起:java.lang.NoSuchMethodException:[class android.content.Context,interface android.util.AttributeSet]   11-17 20:02:25.540:E / AndroidRuntime(1482):at java.lang.Class.getConstructorOrMethod(Class.java:460)   11-17 20:02:25.540:E / AndroidRuntime(1482):at java.lang.Class.getConstructor(Class.java:431)   11-17 20:02:25.540:E / AndroidRuntime(1482):在android.preference.GenericInflater.createItem(GenericInflater.java:377)   11-17 20:02:25.540:E / AndroidRuntime(1482):... 22更多   11-17 20:02:28.760:I / Process(1482):发送信号。 PID:1482 SIG:9

SeekBarPreference.java

public class SeekBarPreference extends Preference implements OnSeekBarChangeListener
{

public SeekBarPreference(Context context)
{   
    super(context);
    Log.i("SBP", "In SBP!");
}

@Override
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
    // TODO Auto-generated method stub

}

@Override
public void onStartTrackingTouch(SeekBar arg0) {
    // TODO Auto-generated method stub

}

@Override
public void onStopTrackingTouch(SeekBar arg0) {
    // TODO Auto-generated method stub

}

@Override
protected View onCreateView(ViewGroup parent) {
    Log.i("SBP", "In SBP2!");
    return super.onCreateView(parent);
}

}

1 个答案:

答案 0 :(得分:2)

您只实现了一个构造函数。为了能够使用Preference,您应该从Preference实现另外两个构造函数:

还要实现这两个构造函数:

Preference(Context context, AttributeSet attrs)

Preference(Context context, AttributeSet attrs, int defStyle)

在这里你的日志: 引起:java.lang.NoSuchMethodException:[class android.content.Context,interface android.util.AttributeSet]