gpt4 book ai didi

安卓 : Set a preference's summary in a main preference screen to the values selected in a sub preference screen

转载 作者:太空狗 更新时间:2023-10-29 14:19:41 29 4
gpt4 key购买 nike

我的需求

  • 拥有一个充满偏好的主屏幕 (main_screen)
  • 单击此 main_screen 中的一个首选项(pref1)会打开一个
    设置子屏幕(sub_screen)
  • 在这个 sub_screen 中,有 2 个 ListPreferences,当用户
    从这些列表中选择一个值,该 ListPreference 的摘要
    更新为包含用户选择的值
  • 在 main_screen 中,pref1 的摘要应显示值
    在子屏幕的 listPreferences 中选择(即摘要有
    List1SelectedValue, List2SelectedValue)
  • 第一次进入 main_screen 时,摘要
    pref1 应填充
  • 转到 sub_screen 并更改值,然后
    返回到 main_screen 应更新摘要以反射(reflect)
    sub_screen 中新选择的值。

  • 我四处搜索,我无法弄清楚如何将主屏幕上的 pref1 的摘要设置为在 sub_screen 中选择的值。

    示例 main_screen xml
    <PreferenceScreen>

    <PreferenceCategory
    style="@style/settings_category_text"
    android:title="Section 1 Heading" >

    <Preference
    android:key="section1_key1"
    android:title="Pref 1">
    </Preference>

    </PreferenceCategory>

    <PreferenceCategory
    style="@style/settings_category_text"
    android:key="extra_settings_category"
    android:title="Section 2 Heading" >

    <PreferenceScreen
    android:key="sub_screen"
    android:title="Sub screen of settings"
    android:summary="">
    <intent
    android:targetPackage="com.my.test"
    android:targetClass="com.my.test.SubScreenPreferenceActivity" />
    </PreferenceScreen>

    </PreferenceCategory>

    </PreferenceScreen>

    示例子屏幕 xml
    <PreferenceScreen>

    <PreferenceCategory
    style="@style/settings_category_text"
    android:title="Additional Settings" >

    <ListPreference
    android:key="list_pref1"
    android:title="List Pref 1"
    android:defaultValue="1"
    android:entries="@array/list_pref1_titles"
    android:entryValues="@array/list_pref1_values"
    android:summary="%s"
    />

    <ListPreference
    android:key="list_pref2"
    android:title="List Pref 2"
    android:defaultValue="1"
    android:entries="@array/list_pref2_titles"
    android:entryValues="@array/list_pref2_values"
    android:summary="%s"
    />
    </PreferenceCategory>

    </PreferenceScreen>

    sub_screen 中列表值的示例数组
    <string-array name="list_pref1_titles">
    <item>Apples</item>
    <item>Pears</item>
    <item>Bananas</item>
    </string-array>
    <string-array name="list_pref1_values">
    <item>1</item>
    <item>2</item>
    <item>3</item>
    </string-array>

    <string-array name="list_pref2_titles">
    <item>Cream</item>
    <item>Ice Cream</item>
    <item>Custard</item>
    </string-array>

    <string-array name="list_pref2_values">
    <item>1</item>
    <item>2</item>
    <item>3</item>
    </string-array>

    我的课
  • com.my.test.MainPreferenceActivity :此主屏幕的代码
    偏好
  • com.my.test.SubScreenPreferenceActivity :此子屏幕的代码
    偏好

  • 屏幕是什么样子的

    显示设置时,用户将看到
    Section 1 Heading
    -----------------
    Pref 1

    Section 2 Heading
    -----------------
    Sub screen of settings

    单击“设置的子屏幕”将带您进入第二个设置屏幕,如下所示
    Additional Settings
    -------------------
    List Pref 1
    Apples

    List Pref 2
    Cream

    单击“List Pref 1”将显示一个弹出窗口供用户选择 Apples/Pears/Bananas

    单击“List Pref 2”将显示一个弹出窗口供用户选择 Cream/Ice cream/Custard

    在 SubScreenPreferenceActivity 中,我注册了一个 OnSharedPreferenceChangeListener ,以便当用户从弹出的选项之一中选择一个值时,ListPreferences 的摘要会更新为用户选择的值。

    我完全卡在

    我希望 main_screen 还包含已在 sub_screen 中设置的值的摘要,例如,在主屏幕中我希望它呈现如下
    Section 1 Heading
    ----------------
    Pref 1

    Section 2 Heading
    ------------------
    Sub screen of settings
    Apples, Cream

    我希望当我最初进入主屏幕时,“设置的子屏幕”首选项的摘要已经设置为子屏幕中首选项的当前存储值(使用显示值而不是实际值)。

    此外,当用户转到子屏幕并更改值时,返回到 main_screen 时,“设置的子屏幕”首选项的摘要会更新以显示设置的新值。

    如何将 main_screen (MainPreferenceActivity) 中的摘要设置为 sub_screen 中选择的值?

    当 sub_screen (SubScreenPreferenceActivity) 中的首选项更改时,如何更新 main_screen?

    为什么我在自己的文件和 Activity 中有 sub_screen xml

    顺便说一句,我有一个单独的 XML 文件中的子屏幕,并且有它自己的 Activity 类,因为我需要从 Android 设置屏幕中调用它。

    在 Android 设置中,当您单击我的应用程序的帐户时,它会显示“帐户和设置|同步设置”屏幕。在此屏幕中,我让它显示“第 2 节标题”PreferenceCategory 部分(就像在我的应用程序设置屏幕中一样),单击“帐户和设置|同步设置”屏幕将您带到我的应用程序中的子部分首选项屏幕。
    Account & Settings | Sync Settings

    AppIcon myAccount
    appName

    Section 2 Heading
    -----------------
    Sub screen of settings
    Apples, Cream

    DATA & SYNCHRONIZATION
    ----------------------

    account_authenticator.xml
    <account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
    android:accountType="myAccount"
    android:icon="@drawable/launcher"
    android:label="@string/app_name"
    android:smallIcon="@drawable/launcher"
    android:accountPreferences="@xml/account_preferences"/>

    account_preferences.xml
    <?xml version="1.0" encoding="UTF-8"?>

    <PreferenceCategory
    style="@style/settings_category_text"
    android:key="extra_settings_category"
    android:title="Section 2 Heading" />

    <PreferenceScreen
    android:key="sub_screen"
    android:title="Sub screen of settings"
    android:summary="">
    <intent
    android:targetPackage="com.my.test"
    android:targetClass="com.my.test.SubScreenPreferenceActivity" />
    </PreferenceScreen>


    </PreferenceScreen>

    最佳答案

    我自己解决了这个问题。事实证明它并不太复杂。

    在第一个首选项屏幕的 Activity 的“onResume”中,我只是调用一个实用程序方法来生成首选项的摘要字符串,其摘要包含第二个屏幕中所有选定值的值。此实用程序方法查询存储的首选项以获取首选项值,然后组成一个合适的字符串。由于此实用程序方法检查存储的首选项的值,因此当您第一次进入 Activity 以及从子屏幕返回 Activity 时,摘要将是准确的。

    例如

    在“com.my.test.MainPreferenceActivity”“onResume”方法中我有以下

    // update the preference's summary to a string containing the values selected in the sub-screen
    Preference syncPref = findPreference(SUB_SCREN_OF_SETTINGS);
    syncPref.setSummary(getSubScreenSummary(....));



    public String getSubScreenSummary(){
    // get the value of list_pref_1
    // get the value of list_pref_2
    String s = ...... // build up the string based on values of list_pref_1/list_pref_2
    return s;
    }

    关于安卓 : Set a preference's summary in a main preference screen to the values selected in a sub preference screen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18123823/

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