我想制作自己的自定义偏好 . 但是当我使用包含自定义首选项的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 回答
好吧,我为自己找到了解决方案 .
您只需在自定义首选项类中使用ALL构造函数 . 像这样: