Android 在PreferenceActivity中膨胀复选框时出错

Android 在PreferenceActivity中膨胀复选框时出错,android,xml,checkbox,Android,Xml,Checkbox,我的pref_general.xml文件有一些问题,因为我收到以下错误消息: android.view.InflateException:二进制XML文件行#19:膨胀类android.widget.CheckBox时出错 然后,logcat指向我的PreferenceActivity中的一行,我称之为“addPreferencesFromResource(R.xml.pref_general);” 经过几个小时的努力,我仍然不知道问题出在哪里,所以也许有人对此很熟悉,或者只是换一双眼睛就能发现

我的pref_general.xml文件有一些问题,因为我收到以下错误消息:

android.view.InflateException:二进制XML文件行#19:膨胀类android.widget.CheckBox时出错

然后,logcat指向我的PreferenceActivity中的一行,我称之为“addPreferencesFromResource(R.xml.pref_general);”

经过几个小时的努力,我仍然不知道问题出在哪里,所以也许有人对此很熟悉,或者只是换一双眼睛就能发现问题

pref_general.xml:


查看您的代码,您是否尝试从中删除“/”字符

android:title="Activer/Désactiver les notifications" 
编辑:我可能应该对此发表评论,但我还没有声誉。

支持库的
23.2.0
版本可能会导致这种情况

这已在图书馆的修订版
23.2.1
中修复。此版本说明了以下问题,我认为这是问题的根本原因,并解释了为什么它仅在运行API 19的手机上失败:

修复了API上DrawableCompat.wrap()和LayerDrawable中的异常 第17至19级


这个问题被否决的原因是什么?你是不是漏掉了一行还是忘了关闭PreferenceScreen标签?@PabloRivero不,我没有忘记关闭它,只是剪了几行代码在这里发布:/That you我要在黑暗中拍摄,但可能是因为字符串Activer/Désactiver les通知中的反斜杠。请尝试更改文本并让我知道。@UrielFrankel我不这么认为,因为我添加了另一个带有CheckBoxPreference的活动和xml pref,其中包含一个简单的文本,但没有任何效果,并且存在相同的问题,但当我删除此CheckBoxPreference时,所有功能都正常,而不是“/”这是关于支持库23.2.0在Api 19中运行应用程序是一个bug谢谢你让我知道!
public class SettingsActivity extends PreferenceActivity {

CheckBoxPreference notification;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.pref_general);


    LinearLayout root = (LinearLayout)findViewById(android.R.id.list).getParent().getParent().getParent();
    Toolbar bar = (Toolbar) LayoutInflater.from(this).inflate(R.layout.settings, root, false);
    root.addView(bar, 0); // insert at top
    bar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(SettingsActivity.this, MainActivity.class);
            startActivity(intent);
            finish();
        }
    });



    SharedPreferences settingsPrefs = PreferenceManager.getDefaultSharedPreferences(this);
    notification = (CheckBoxPreference) findPreference("NOTIF");
    notification.setOnPreferenceChangeListener(new OnPreferenceChangeListener(){

        public boolean onPreferenceChange(Preference preference,
                Object newValue) {
            if (newValue.toString().equals("true"))
            {
                notificationsOn();
                //PushService.setDefaultPushCallback(getApplicationContext(), MainActivity.class);
                //PushService.subscribe(getApplicationContext(), null, MainActivity.class, R.drawable.ic_notification);

            }
            else
            {
                notificationsOff();
                //PushService.setDefaultPushCallback(getApplicationContext(), null);
                //PushService.unsubscribe(getApplicationContext(), null);
                //PushService.unsubscribe(getApplicationContext(), "");
            }
            return true;
        }

        private void notificationsOn() {
            // TODO Auto-generated method stub
            /*Toast.makeText(SettingsActivity.this, "Notifications: Activée", Toast.LENGTH_SHORT).show();
            PushService.setDefaultPushCallback(getApplicationContext(), MainActivity.class);
            Pushbots.sharedInstance().setNotificationEnabled(true);*/

        }

        private void notificationsOff() {
            // TODO Auto-generated method stub
            /*Toast.makeText(SettingsActivity.this, "Notifications: Desactivée", Toast.LENGTH_SHORT).show();
            PushService.setDefaultPushCallback(getApplicationContext(), null);
            Pushbots.sharedInstance().setNotificationEnabled(false);*/

        }

    });



    Preference myPref = (Preference) findPreference("feedback");
    myPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
        public boolean onPreferenceClick(Preference preference) {

            Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
                    "mailto", "feedback@soft-grip-support.esy.es", null));
            emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Votre Sujet");
            emailIntent.putExtra(Intent.EXTRA_TEXT, "Votre FeedBack (Texte)");
            startActivity(Intent.createChooser(emailIntent, "Envoyer email à"));

            return false;

        }
    });

    Preference ver =  (Preference) findPreference("version");
    ver.setOnPreferenceClickListener(new OnPreferenceClickListener() {
        public boolean onPreferenceClick(Preference preference) {

         Toast.makeText(SettingsActivity.this, "1.0.0(Build A750)", Toast.LENGTH_LONG).show();

            return false;

        }
    });

    Preference cache =  (Preference) findPreference("cache");
    cache.setOnPreferenceClickListener(new OnPreferenceClickListener() {
        public boolean onPreferenceClick(Preference preference) {


            deleteCache(SettingsActivity.this);
            Toast.makeText(SettingsActivity.this, "Cache Vidée", Toast.LENGTH_LONG).show();

            return false;

        }
    });

    Preference faq = (Preference)findPreference("FAQ");
    faq.setOnPreferenceClickListener(new OnPreferenceClickListener() {

        @Override
        public boolean onPreferenceClick(Preference arg0) {

            String url = "www.soft-grip.net/faq";
            Intent intent = new Intent(SettingsActivity.this, ActivityWebView.class);
            intent.putExtra("share", url);
            startActivity(intent);


            /*String url = "http://www.google.com";
            Intent i = new Intent(Intent.ACTION_VIEW);
            i.setData(Uri.parse(url));
            startActivity(i);*/

            return false;
        }
    });

    Preference fb =  (Preference) findPreference("fb");
    fb.setOnPreferenceClickListener(new OnPreferenceClickListener() {
        public boolean onPreferenceClick(Preference preference) {

            try {
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("fb://page/503359346436234"));
                startActivity(intent);
            } catch(Exception e) {
                startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com/Soft.Grip.Inc")));
            }

            return false;

        }
    });

    Preference twt =  (Preference) findPreference("twt");
    twt.setOnPreferenceClickListener(new OnPreferenceClickListener() {
        public boolean onPreferenceClick(Preference preference) {

            Intent intent = null;
            try {
                // get the Twitter app if possible
                getPackageManager().getPackageInfo("com.twitter.android", 0);
                intent = new Intent(Intent.ACTION_VIEW, Uri.parse("twitter://user?user_id=1588577185"));
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            } catch (Exception e) {
                // no Twitter app, revert to browser
                intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://twitter.com/SoftGripInc"));
            }
            startActivity(intent);

            return false;

        }
    });

    Preference sms = (Preference)findPreference("sms");
    sms.setOnPreferenceClickListener(new OnPreferenceClickListener() {

        @Override
        public boolean onPreferenceClick(Preference arg0) {

            Intent sendIntent= new Intent(Intent.ACTION_VIEW);
            sendIntent.putExtra("sms_body", "smsBody");
            sendIntent.setType("vnd.android-dir/mms-sms");
            startActivity(sendIntent);

            return false;
        }
    });

    Preference http =  (Preference) findPreference("http");
    http.setOnPreferenceClickListener(new OnPreferenceClickListener() {
        public boolean onPreferenceClick(Preference preference) {

            String url = "http://www.soft-grip.net";
            Intent i = new Intent(Intent.ACTION_VIEW);
            i.setData(Uri.parse(url));
            startActivity(i);

            return false;

        }
    });

    Preference merci =  (Preference) findPreference("deve");
    merci.setOnPreferenceClickListener(new OnPreferenceClickListener() {
        public boolean onPreferenceClick(Preference preference) {

            ShowDialog(SettingsActivity.this, "Merci", "Merci d'utiliser l'App Soft Grip!\nDéveloppeur : Soft Grip Inc. \nTous les droits réservés. \nSoft-Grip Inc © 2015 ", false);
            return false;

        }




        public void ShowDialog(Context context, String title, String message, Boolean status) {
    AlertDialog alertDialog = new AlertDialog.Builder(context).create();

    // Setting Dialog Title
    alertDialog.setTitle(null);

    // Setting Dialog Message
    alertDialog.setMessage(message);

    // Setting alert dialog icon
//  alertDialog.setIcon((status) ? R.drawable.success : R.drawable.fail);

    // Setting OK Button
    alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {


        }
    });

    // Showing Alert Message
    alertDialog.show();

}
    });


}

public static void deleteCache(Context context) {
    try {
        File dir = context.getCacheDir();
        if (dir != null && dir.isDirectory()) {
            deleteDir(dir);
        }
    } catch (Exception e) {}
}

public static boolean deleteDir(File dir) {
    if (dir != null && dir.isDirectory()) {
        String[] children = dir.list();
        for (int i = 0; i < children.length; i++) {
            boolean success = deleteDir(new File(dir, children[i]));
            if (!success) {
                return false;
            }
        }
    }
    return dir.delete();
}
android.view.InflateException: Binary XML file line #19: Error inflating class android.widget.CheckBox
    at android.view.LayoutInflater.createView(LayoutInflater.java:627)
    at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
    at android.view.LayoutInflater.onCreateView(LayoutInflater.java:676)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:701)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:470)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:354)
    at android.preference.Preference.onCreateView(Preference.java:531)
    at android.preference.Preference.getView(Preference.java:494)
    at android.preference.PreferenceGroupAdapter.getView(PreferenceGroupAdapter.java:222)
    at android.widget.AbsListView.obtainView(AbsListView.java:2351)
    at android.widget.ListView.makeAndAddView(ListView.java:1816)
    at android.widget.ListView.fillDown(ListView.java:697)
    at android.widget.ListView.fillFromTop(ListView.java:763)
    at android.widget.ListView.layoutChildren(ListView.java:1646)
    at android.widget.AbsListView.onLayout(AbsListView.java:2207)
    at android.view.View.layout(View.java:15033)
    at android.view.ViewGroup.layout(ViewGroup.java:4799)
    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1692)
    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1534)
    at android.widget.LinearLayout.onLayout(LinearLayout.java:1443)
    at android.view.View.layout(View.java:15033)
    at android.view.ViewGroup.layout(ViewGroup.java:4799)
    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1692)
    at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1677)
    at android.widget.LinearLayout.onLayout(LinearLayout.java:1445)
    at android.view.View.layout(View.java:15033)
    at android.view.ViewGroup.layout(ViewGroup.java:4799)
    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1692)
    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1534)
    at android.widget.LinearLayout.onLayout(LinearLayout.java:1443)
    at android.view.View.layout(View.java:15033)
    at android.view.ViewGroup.layout(ViewGroup.java:4799)
    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
    at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
    at android.view.View.layout(View.java:15033)
    at android.view.ViewGroup.layout(ViewGroup.java:4799)
    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1692)
    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1534)
    at android.widget.LinearLayout.onLayout(LinearLayout.java:1443)
    at android.view.View.layout(View.java:15033)
    at android.view.ViewGroup.layout(ViewGroup.java:4799)
    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
    at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
    at android.view.View.layout(View.java:15033)
    at android.view.ViewGroup.layout(ViewGroup.java:4799)
    at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2143)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1854)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1062)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5998)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
    at android.view.Choreographer.doCallbacks(Choreographer.java:574)
    at android.view.Choreographer.doFrame(Choreographer.java:544)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
    at android.os.Handler.handleCallback(Handler.java:733)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5590)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1280)
    at com.android.into
android:title="Activer/Désactiver les notifications"