【问题标题】:Custom PreferenceActivity Layout is lost for nested PreferenceScreens嵌套 PreferenceScreens 的自定义 PreferenceActivity 布局丢失
【发布时间】:2011-01-27 21:16:37
【问题描述】:

我有一个偏好活动,它从以下 XML 获取它的布局。这会在首选项的底部显示一个按钮。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:myapp="http://schemas.android.com/apk/res/com.stealthcopter.nexus.nexusgl"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
<ListView android:id="@android:id/list"
    android:layout_weight="1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />
<Button android:text="This is a button on top of all preferences."
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />         
</LinearLayout>

但是,当打开一个嵌套的 PreferenceScreen 时,它会恢复为仅显示一个列表视图,有没有一种简单的方法可以保持首选项屏幕之间的布局相同?

我试过 PreferenceScreen.setLayoutResource(R.id.layout.main);但这只会改变打开之前显示的视图

更新

我通过将嵌套的 PreferenceScreens 更改为普通首选项并覆盖其 onclick 方法以从列表视图中清除首选项并从适当的 XML 文件重新加载首选项来修复(Kludged)此问题。

【问题讨论】:

    标签: android preferences preferencescreen


    【解决方案1】:

    我相信这是here 描述的错误的另一个症状 一种解决方法是在每次打开首选项屏幕时重置布局。

    【讨论】:

    • 有没有一种通用的方法来捕捉这个事件,比如覆盖 onSmth 方法?还是我必须为每个 PreferenceScreen 项目设置一个侦听器(它会起作用,因为可能会在实际打开屏幕之前调用侦听器)?
    • 我查看了源代码:我们必须为每个 PreferenceScreen 项目设置一个侦听器,并且我们必须手动处理屏幕之间的切换以更改它们的外观,因为每个嵌套的 PreferenceScreen 都会打开一个新对话框,所以我们的活动对它一无所知,也无法改变它。
    【解决方案2】:

    您想通过自定义首选项屏幕实现什么目标?是不是这里要考虑偏好?我也很确定首选项布局必须位于“xml”文件夹中,而不是“布局”中

    【讨论】:

    • 首选项屏幕用首选项填充列表视图,通常不提供,因此它只是为您创建一个列表视图。如果您为偏好屏幕定义布局,它将使用该布局(您必须包含一个 ID 为 @android:id/list 的列表视图,它可以填充)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多