首页 文章

自定义偏好的通货膨胀失败

提问于
浏览
0

我想制作自己的自定义偏好 . 但是当我使用包含自定义首选项的PreferenceFragment启动活动时,它失败并出现以下错误:

七月1日至13日:11:26.117 14403-14403 / com.laudien.p1xelfehler.batterywarner_pro E / AndroidRuntime:致命异常:主要过程:com.laudien.p1xelfehler.batterywarner_pro,PID:14403了java.lang.RuntimeException:无法启动活动ComponentInfo {com.laudien.p1xelfehler.batterywarner_pro / com.laudien.p1xelfehler.batterywarner.Activities.SettingsActivity.SettingsActivity}:android.view.InflateException:二进制XML文件行#42:错误导致类com.laudien.p1xelfehler.batterywarner . Activities.SettingsActivity.SliderPreference在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)在android.app.ActivityThread.-wrap12(ActivityThread.java)在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1460)在android.app.Handler.dispatchMessage(Handler.java:102)android.app.Looper.loop(Looper.java:154)android.app java.lang.reflect中的.ActivityThread.main(ActivityThread.java:6077) .Method.invoke(Native Method)位于com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:865)com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)引起的:android.view.InflateException:二进制XML文件行#42:在android.preference上的android.preference.GenericInflater.createItem(GenericInflater.java:388)中输入com.laudien.p1xelfehler.batterywarner.Activities.SettingsActivity.SliderPreference类错误 . GenericInflater.createItemFromTag(GenericInflater.java:432)在android.preference.GenericInflater.rInflate(GenericInflater.java:483)在android.preference.GenericInflater.rInflate(GenericInflater.java:495)在android.preference.GenericInflater.inflate(GenericInflater .java:327)在Android.preference.PreferenceFragment.addPreferencesFromResource(PreferenceFragment.java:326)的android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:280)上的android.preference.GenericInflater.inflate(GenericInflater.java:264)在com.laudien.p1x elfehler.batterywarner.Activities.SettingsActivity.NewSettingsFragment.onCreate(NewSettingsFragment.java:14)at android.app.Fragment.performCreate(Fragment.java:2335)at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:949)at android .app.BackStackRecord.setLastIn(BackStackRecord.java:857)在android.app.BackStackRecord.calculateFragments(BackStackRecord.java:897)在android.app.BackStackRecord.run(BackStackRecord.java:727)在android.app.FragmentManagerImpl . execPendingActions(FragmentManager.java:1578)位于android.app.A活动中的android.app.Arag.Amp.Av响应状态(Activity.java:6680)上的android.app.Arag.Aform.PerreadActions(Activity.java:6680) :android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)在Android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1460)的android.app.ActivityThread.-wrap12(ActivityThread.java)上的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) android.os.Handler.dispatchMessage(Handler.java :102)在android.app.Looper.loop(Looper.java:154)的android.app.ActivityThread.main(ActivityThread.java:6077),位于com的java.lang.reflect.Method.invoke(Native Method) . android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:865)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)产生的原因:java.lang.NoSuchMethodException:类机器人 . content.Context,接口android.util.AttributeSet]在java.lang.Class.getConstructor0(Class.java:2204)java.lang.Class.getConstructor(Class.java:1683),位于android.preference.GenericInflater.createItem( GenericInflater.java:378)在android.preference.GenericInflater.createItemFromTag(GenericInflater.java:432)在android.preference.GenericInflater.rInflate(GenericInflater.java:483)在android.preference.GenericInflater.rInflate(GenericInflater.java:495 )android.preference.Preferen上android.preference.GenericInflater.inflate(GenericInflater.java:327)的android.preference.GenericInflater.inflate(GenericInflater.java:264) ceManager.inflateFromResource(PreferenceManager.java:280)在android.preference.PreferenceFragment.addPreferencesFromResource(PreferenceFragment.java:326)at atandroid.app.FragmentManagerImpl.moveToState(FragmentManager.java: 949)在android.app.BackStackRecord.setLastIn(BackStackRecord.java:857)的android.app.BackStackRecord.calculateFragments(BackStackRecord.java:897)安卓android.app.BackStackRecord.run(BackStackRecord.java:727) . android.app.ActivityThread.performLaunchActivity上的android.app.Arag.performStart(Activity.java:6680)上的android.app.FragmentController.execPendingActions(FragmentController.java:371)的app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1578) (ActivityThread.java:2609)位于android.app.A活动时的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)android.app.ActivityThread $ H.handleMessage(ActivityThread.java)上的android.app.ActivityThread.-wrap12(ActivityThread.java) :1460)在android.os.Handler.dispatchMessa位于android.app.Looper.loop(Looper.java:154)的ge(Handler.java:102)位于android.app.ActivityThread.main(ActivityThread.java:6077)的java.lang.reflect.Method.invoke(Native方法)com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:865)com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)

这是我的SliderPreference.java:

public class SliderPreference extends Preference {
@Override
protected View onCreateView(ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    return inflater.inflate(R.layout.preference_slider, parent, false);
}

public SliderPreference(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
}

@Override
protected void onClick() {
    super.onClick();
}

}

这是preference_slider.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<TextView
    android:id="@+id/textView_lowBattery"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Title"
    android:textSize="18sp" />

<CheckBox
    android:id="@+id/checkBox_lowBattery"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/enabled" />

<SeekBar
    android:id="@+id/seekBar_lowBattery"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

这是NewSettingsFragment.java:

public class NewSettingsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    PreferenceManager.setDefaultValues(getActivity(), R.xml.preferences, false);
    addPreferencesFromResource(R.xml.preferences);
}

}

我在preference.xml文件中添加了首选项,就像这样:

<com.laudien.p1xelfehler.batterywarner.Activities.SettingsActivity.SliderPreference />

谢谢您的帮助! :)

1 回答

  • 0

    好吧,我为自己找到了解决方案 .

    您只需在自定义首选项类中使用ALL构造函数 . 像这样:

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    public SliderPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }
    
    public SliderPreference(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    
    public SliderPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    
    public SliderPreference(Context context) {
        super(context);
    }
    

相关问题