Android 在PreferenceActivity中膨胀复选框时出错
我的pref_general.xml文件有一些问题,因为我收到以下错误消息: android.view.InflateException:二进制XML文件行#19:膨胀类android.widget.CheckBox时出错 然后,logcat指向我的PreferenceActivity中的一行,我称之为“addPreferencesFromResource(R.xml.pref_general);” 经过几个小时的努力,我仍然不知道问题出在哪里,所以也许有人对此很熟悉,或者只是换一双眼睛就能发现问题 pref_general.xml: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);” 经过几个小时的努力,我仍然不知道问题出在哪里,所以也许有人对此很熟悉,或者只是换一双眼睛就能发现
查看您的代码,您是否尝试从中删除“/”字符
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"