gpt4 book ai didi

android - ListPreference 上的帐户首选项崩溃

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:55:02 24 4
gpt4 key购买 nike

我已经使用 AccountAuthenticator 内容创建了一个帐户类型,如 SampleSyncAdapter 教程中所做的那样。我现在正在尝试让帐户首选项正常工作。

我已将行 android:accountPreferences="@xml/account_preferences" 添加到我的 account-authenticator 中,account_preferences.xml 如下所示:

<?xml version="1.0" encoding="utf-8"?>

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="@string/alum_settings_title"/>

<CheckBoxPreference
android:key="sync_alum"
android:title="@string/sync_alum"
android:summaryOn="@string/sync_alum_check"
android:summaryOff="@string/sync_alum_nocheck"/>

<ListPreference
android:key="sync_alum_since"
android:title="@string/alum_years"
android:entries="@array/years"
android:entryValues="@array/years"
android:dependency="sync_alum"/>
</PreferenceScreen>

复选框首选项的工作方式与它应有的完全一样,但 ListPreference 使整个系统崩溃并显示以下消息:

05-14 22:32:16.794: ERROR/AndroidRuntime(63): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

我在 EditTextPreference 和我创建的 DialogPreference 的自定义子类中遇到了同样的错误。

最佳答案

我终于成功启动了我的自定义首选项 Activity 。陷阱是您必须保留以下 XML 布局(如上所示):

<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="Account settings" />
<PreferenceScreen
android:key="key"
android:title="General settings"
android:summary="Some summary">

<!-- package relative class name-->
<intent
android:action="my.account.preference.MAIN"
android:targetClass="prefs.AccountPreferencesActivity.class">
</intent>
</PreferenceScreen>
</PreferenceScreen>

以及相应的 AndroidManifest.xml 条目:

<activity
android:label="Account preferences"
android:name=".prefs.AccountPreferencesActivity">
<intent-filter>
<action
android:name="my.account.preference.MAIN" />
<category
android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

如果您查看 Android code您可以找到以下代码行:

    private void updatePreferenceIntents(PreferenceScreen prefs) {
for (int i = 0; i < prefs.getPreferenceCount(); i++) {
Intent intent = prefs.getPreference(i).getIntent();
if (intent != null) {
intent.putExtra(ACCOUNT_KEY, mAccount);
// This is somewhat of a hack. Since the preference screen we're accessing comes
// from another package, we need to modify the intent to launch it with
// FLAG_ACTIVITY_NEW_TASK.
// TODO: Do something smarter if we ever have PreferenceScreens of our own.
intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NEW_TASK);
}
}
}

这些将标志添加到 XML 中指定的 Intent。但这仅适用于 PreferenceScreen 的所有一年级 child 。我的错是我将 Intent 封装在 PreferenceCategory 中,因此从未对标志进行 OR 运算。

希望我能帮上忙。

关于android - ListPreference 上的帐户首选项崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2838063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com