首选项列表仅显示第一个元素

2024-04-22

我正在开发一个PreferenceActivity与定制Preference意见。我的问题是我创建了一个视图ListView它只显示第一个元素。我发布我的代码和图像:http://imageshack.us/photo/my-images/545/sc20120307161530.png/ http://imageshack.us/photo/my-images/545/sc20120307161530.png/

http://img545.imageshack.us/img545/7207/sc20120307161530.png' border='0'/>

xml:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

    <PreferenceCategory
        android:key="player_settings"
        android:title="@string/settings_player_config" >
        <EditTextPreference
            android:defaultValue="@string/settings_player_default_name"
            android:dialogMessage="@string/settings_player_summary"
            android:dialogTitle="@string/settings_playersname"
            android:key="player_name"
            android:summary="@string/settings_player_summary"
            android:title="@string/settings_playersname" />
    </PreferenceCategory>
    <PreferenceCategory
        android:key="volume"
        android:title="@string/settings_volume" >
        <com.battleship.preferences.SeekBarPreferences
            android:defaultValue="50"
            android:key="volume"
            android:title="@string/settings_volume" />
    </PreferenceCategory>
    <PreferenceCategory
        android:key="shine"
        android:title="@string/settings_shine" >
        <com.battleship.preferences.SeekBarPreferences
            android:defaultValue="50"
            android:key="shine"
            android:title="@string/settings_shine" />
    </PreferenceCategory>
    <PreferenceCategory
        android:key="themeTitle"
        android:title="@string/settings_group_themes" >
        <com.battleship.preferences.ListPreferences android:key="theme" />
    </PreferenceCategory>
    <PreferenceCategory
        android:key="fontsTitle"
        android:title="@string/settings_group_font_size" >
        <com.battleship.preferences.ListPreferences android:key="font" />
    </PreferenceCategory>

</PreferenceScreen>

自定义列表首选项:

package com.battleship.preferences;

import com.battleship.R;

import android.content.Context;
import android.content.SharedPreferences;
import android.media.AudioManager;
import android.preference.Preference;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.Toast;

public class ListPreferences extends Preference implements
        OnCheckedChangeListener {

    public ListPreferences(Context context) {
        super(context);
    }

    public ListPreferences(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ListPreferences(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onClick() {

        super.onClick();
        Toast t = Toast.makeText(getContext(), "HOLA!", 3);
        t.show();
    }

    @Override
    protected View onCreateView(ViewGroup parent) {



        String[] contentString = new String[3];
        if (getKey().equals("theme")) {
            contentString = new String[] {
                    (getContext().getString(R.string.settings_theme_default)),
                    (getContext().getString(R.string.settings_theme_black)),
                    (getContext().getString(R.string.settings_theme_white)) };
        } else {
            contentString = new String[] {
                    (getContext().getString(R.string.settings_font_big)),
                    (getContext().getString(R.string.settings_font_medium)),
                    (getContext().getString(R.string.settings_font_little)) };
        }

        ListView listView = new ListView(getContext());
        ArrayAdapter<String> array = new ArrayAdapter<String>(getContext(),
                android.R.layout.simple_list_item_single_choice,
                android.R.id.text1, contentString);
        listView.setAdapter(array);
        listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);


        return listView;
    }

    private void updatePreference(int intRadio) {
        SharedPreferences.Editor editor = getEditor();
        editor.putInt(getKey(), intRadio);
        editor.commit();
    }


}

当每个人都试图告诉你不应该这样做而不是仅仅回答你的问题时,你难道不讨厌吗?能够动态生成内容对于应用程序的灵活性至关重要,我完全知道您想要什么。

假设所有 ListView 条目的高度大致相同(省略不相关的部分),这将起作用。顺序很重要,请尽量按照我所指示的那样保留:

import android.view.ViewGroup.OnHierarchyChangeListener;

public class ListPreferences extends Preference implements
    OnCheckedChangeListener, OnHierarchyChangeListener {

private ListView listView;
private View thisView;
private int listHeight = 0;

@Override
protected View onCreateView(ViewGroup parent) {
    this.setLayoutResource(R.layout.listview_preference_layout);
    thisView = super.onCreateView(parent);
    listView = (ListView) thisView.findViewById(android.R.id.list);
    listView.setOnHierarchyChangeListener(this);
    String[] contentString = new String[3];
    if (getKey().equals("theme")) {
        contentString = new String[] {
        (getContext().getString(R.string.settings_theme_default)),
        (getContext().getString(R.string.settings_theme_black)),
        (getContext().getString(R.string.settings_theme_white)) };
    } else {
        contentString = new String[] {
        (getContext().getString(R.string.settings_font_big)),
        (getContext().getString(R.string.settings_font_medium)),
        (getContext().getString(R.string.settings_font_little)) };
    }

    ArrayAdapter<String> array = new ArrayAdapter<String>(getContext(),
        android.R.layout.simple_list_item_single_choice,
        android.R.id.text1, contentString);
    listView.setAdapter(array);
    listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    return thisView;
}

public void onChildViewAdded(View parent, View child) {
    int childHeight = child.getMeasuredHeight();
    if(childHeight > 0)
    {
        listHeight = listView.getAdapter().getCount() * childHeight;
        thisView.setMinimumHeight(listHeight);
        Log.i(TAG,"onChildViewAdded, done: "+listHeight+" "+childHeight);
    }
}

public void onChildViewRemoved(View parent, View child) {
}


}

您还需要 res/layout/listview_preference_layout.xml 并包含以下内容:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="fill_vertical|fill_horizontal|fill"
    android:gravity="fill"
    android:orientation="vertical"
   >
    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:clipChildren="true" 
        android:isScrollContainer="true"
        android:layout_gravity="fill_vertical|fill_horizontal|fill"
        android:layout_weight="1"
        android:choiceMode="singleChoice"/>
</LinearLayout
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

首选项列表仅显示第一个元素 的相关文章

  • 无法在 OSX 上使用 eclipse for android 链接到 cocos2dx

    我以前从来没有花这么多时间来初始设置开发环境 这有点荒谬 我正在尝试运行cocos2dx附带的演示代码 我在用着 ADK 附带的 eclipse 风格 cocos2d 2 1beta3 x 2 1 0 ndk r8c 我尝试使用 creat
  • 使用 Retrofit 2.0 发布多部分表单数据,包括图像

    我正在尝试使用 HTTP POST 到服务器改造2 0 MediaType MEDIA TYPE TEXT MediaType parse text plain MediaType MEDIA TYPE IMAGE MediaType pa
  • GLSurfaceView onDrawFrame 清除行为

    我在使用 GLSurfaceView 时遇到了不同的行为 据我所知 程序有责任清除每帧的缓冲区 颜色和深度 这意味着 如果我不清除缓冲区 我将获得最后一帧的内容 或双缓冲的前一帧 似乎无论在某些设备上如何 缓冲区都会被清除 我在一些测试设备
  • Android:直接截屏到字节 - 跳过保存到文件

    我使用以下代码在 root 设备上截取屏幕截图 sh Runtime getRuntime exec su null null os sh getOutputStream os write system bin screencap p sd
  • ViewPager 中的按钮滚动到特定页面

    我的 ViewPager 内的布局之一有一个按钮 R layout add site 我想要点击按钮的选项 它会滚动到我的特定页面 我已经可以选择滑动到特定页面 但我想同时拥有这两个选项 现在我确信有办法做到这一点 但由于某种原因 我无法弄
  • 使用 API 8 及以上版本获取用户/所有者个人资料联系人 URI 和用户图像

    从 API 14 Android 4 0 起 开始我可以使用ContactsContract Profile CONTENT URI得到手机所有者的联系个人资料 Uri 并通过该信息获取他们的头像 联系照片 我想知道如何从 API 8 An
  • ListView 滚动时隐藏和显示浮动按钮

    我正在我的应用程序中创建一个 listView 和一个浮动按钮 我希望根据滚动状态实现隐藏和返回的效果 当 的时候ListView滚动时按钮隐藏得很好 但是当滚动停止时按钮不会返回到其初始位置 有任何想法吗 My Code public c
  • Android模拟器收不到推送通知

    我在谷歌云上使用推送通知 但是由于某种原因我无法在模拟器上接收推送通知 然而 当我在真实设备上测试时 同一个应用程序确实会收到通知 有其他人遇到过这个问题或找到解决方案吗 模拟设备具有网络访问权限 并且与真实设备具有相同的 Android
  • 如何在 jetpack compose 中预览对话框?

    我有这个代码 Composable fun SomeDialog Dialog onDismissRequest properties DialogProperties Preview showBackground true Composa
  • 如何减少 Android 布局中文本之间的行距?

    我想减少所附布局中文本之间的行距 User12 5 部电影 改进 2 5 下面是 xml 我尝试删除 singleLine true 语句并尝试将其设置为 false
  • 减少 android studio 2.1 构建时间

    我之前使用的是 android studio 1 5 刚刚升级到 2 1 但是更新后我的构建花费了更多时间 从 15 秒到现在 2 分钟 我已经尝试过的事情如上所述 在 设置 中启用离线工作 org gradle daemon true o
  • 如何检测 Android 设备是否与 Android Wear 手表配对

    我正在创建一个 Android Wear 应用程序来扩展推送通知 当收到推送通知时 我的应用程序会从服务器下载大约 10 张图像 并在手表上显示这些附加图像 这些图像特定于 Android Wear 应用程序 不会显示在手持设备上 如何判断
  • Android 中的弹出消息

    我正在开发一个应用程序 我想创建一条弹出消息 在我们不关闭时该消息将保持稳定 我想要一些教程来帮助我制作警报对话框 提前致谢 我认为您正在搜索 对话框 框 从而可以向用户显示警报消息 确认消息等 欲了解更多信息 请参阅此 http deve
  • Lcom/google/firebase/FirebaseApp 类中没有虚拟方法 zzbqo()Z;或其超类(“com.google.firebase.FirebaseApp”的声明

    在我的 Android 应用程序中 编译应用程序时出现错误 我正在最新的 android studio 中工作 并使用 Firebase UI Auth 和 Firebase 数据库 所有版本在应用程序级等级文件中都相同 那么为什么我收到此
  • 在 Java/Android 中查找 UTF-8 字符串中的字符数

    我试图找出字符串以 UTF 8 存储时的长度 我尝试了以下方法 String str Charset UTF8 CHARSET Charset forName UTF 8 byte abc str getBytes UTF8 CHARSET
  • Android-如何在指定时间后台下载数据

    我提前很抱歉没有发布任何代码 主要是因为我一生都无法弄清楚我需要如何做我需要做的事情 基本上 在一天中的指定时间间隔 例如下午 5 点 我希望我的应用程序从我的服务器下载一些数据并将其存储在设备上 这是为了减少每次运行应用程序时下载数据对我
  • Android:iOS UIActionSheet 等效项

    我正在转换一个 iOS 应用程序 并且需要实现从 iOS 到 Android 的 UIActionSheet 的等效项 什么 UI 元素最能模仿这一点 我的目标是 Android 2 2 及更高版本 您将使用 AlertDialog 或 D
  • 注意通知持续时间

    是否可以将抬头通知的持续时间设置为无限 现在它只显示 5 秒 已经尝试过不同的事情 例如更改类别 但持续时间始终为 5 秒 这是我的代码 Notification notification notificationBuilder setCa
  • 如何添加不确定的进度条

    我的应用程序 UI 是使用 Android 支持库构建的 但目前没有我的应用程序真正需要的 不确定的 进度条的 AppCompat 版本 我宁愿不使用任何第三方库来实现材料设计进度条 所以我想知道是否有人坐在有关为什么它不包含在支持库中的信
  • 如何在android中创建nanohttpd服务器?

    其实我也查过一些问题 然后去github上找了一下 但我是新来的 我无法理解这个例子 我想在android中创建http服务器 这样我就可以在PC浏览器中访问它 我有一个类扩展 nanohttpd 的实例 但服务器无法工作 不知道为什么 我

随机推荐

  • Process.Start 返回 null 时查找进程 ID?

    如果我尝试通过调用打开图像文件 视频或网站Process Start filepath 直接 那么它通常会成功 但是 Process Start 的返回值有时将为 null 正如这里所讨论的 https stackoverflow com
  • 将硬编码文件路径更改为 VBA 中提示的用户?

    现在 我有一个用于 Word 的 VBA 宏 它可以解析文档中的某种字体 并将所选类型的所有字体输出到文本文件 我打开文本文件的硬编码行是这样的 Open C Documents and Settings Output txt For Ou
  • 实现共享功能的标准方法

    我需要在 iOS 中实现 共享为 功能 例如 一个按钮名为 共享为 并弹出一个对话框 其中包括电子邮件 短信 Facebook Twitter 等项目 我想知道是否有一个标准对话框可以完成这项工作 经过搜索 我发现在 iOS6 中使用 UI
  • 如何使用 C 客户端通过 ActiveMQ 启用 SSL

    我已经配置了 ActiveMQ http activemq apache org http activemq apache org 通过以下方式使用 ssl 上下文RedHat 的 SSL TLS 教程 https access redha
  • HTML 树全宽悬停效果

    我有一个 html 树 主要由嵌套的无序列表组成 我需要为每个叶子创建全宽悬停效果 类似于 Windows 文件菜单树悬停效果 悬停效果是 div div 具有背景颜色和边框 我做了一个模拟全宽度的黑客 但侧面边框不再可见 我可以使用 CS
  • C++/CLI:CA2123:需要 SecurityCriticalAttribute?

    我对这样的错误有点迷失 警告 7 CA2123 Microsoft Security 添加以下安全属性 到 RithmicConnector 连接 字符串 为了匹配基地的 LinkDemand 方法 IConnector Connect S
  • 如何向 Monaco 编辑器添加新的语言语法?

    我添加了我的语言并按照此处的说明进行构建https github com Microsoft monaco languages https github com Microsoft monaco languages npm run prep
  • 选择日期最高的行

    我的表中有一些重复的值 我只想选择那些具有最新 最高日期的值 即 ID Type Name Value Date 1 FRUIT APPLE Imported 2011 03 19 22 08 13 5 FRUIT LEMON Import
  • Promise.all:解析值的顺序

    看着MDN https developer mozilla org en US docs Web JavaScript Reference Global Objects Promise all它看起来像values传递给then Promi
  • C 基本头命令

    我正在尝试为我的编程课从 Linux 重新创建 head 和 tail 命令 我们刚刚开始使用 C 所以我对分配内存和指针的想法很陌生 我想知道为什么这不起作用 include
  • C#:如何将 long 转换为 ulong

    如果我尝试使用 BitConverter 它需要一个字节数组 但我没有 我有一个 Int32 我想将其转换为 UInt32 在 C 中这没有问题 您只需要一个简单的演员阵容即可 由于这样做可能会丢失精度 因此转换是显式的 long x 10
  • 将具有 key=value 对的字符串解析为 JSON

    我的节点应用程序接收以下格式的一系列字符串 a x b y c z 即包含多个空格分隔的字符串key value pairs 将此类字符串转换为以下形式的 JSON 对象的最巧妙方法是什么 a x b y c z 我打赌有一个单行解决方案
  • Spring Boot - 无法从 application.properties 在 xml 中解析属性

    我有一个 Spring Boot 应用程序 My Configuration class使用加载 xml 配置 ImportResource path to xml 其中包含以下行
  • 自动链接:地图如何工作

    我在用TextView 的 android autoLink map 属性转到地图并查找与该文本视图关联的地址 但它的行为很奇怪只找到一些地址 这是我正在尝试的代码
  • 使用 webpack 生成捆绑 TypeScript 定义文件

    我目前正在使用 gulp 来生成我的包的定义文件 如下所示 dtsGenerator default name ngFramework project out Typings raw index d ts 但是 我正在迁移到 webpack
  • 在 Selenium 中捕获 JavaScript 错误

    有没有办法捕获发生的错误DOM in Selenium并且可能与页面中的错误标记相同 举一个简单的例子 假设我试图在一个不存在的 HTML 控件上绑定一个事件 我的浏览器会抛出一个错误 element abcd not found in t
  • pyqt5不显示窗口[重复]

    这个问题在这里已经有答案了 我真的希望有人能帮助我解决这个问题 我正在尝试开始使用pyqt5 并且几乎从我正在学习的课程中复制了这段代码 代码似乎执行没有任何问题 但我应该看到的窗口根本没有出现 我做错了什么 我正在尝试ubuntu 18顺
  • Pycharm交互式控制台不起作用

    我对 python 和 Pycharm 都很陌生 因此 请毫不犹豫地指出我哪里做错了以及如何解决问题 问题是IPython无法像往常一样导入我想要执行的函数 即使 python 文件运行后 我也无法在 IPython 控制台中导入该文件中的
  • 我收到内存异常“System.IO.out of exception”错误

    对于小目录大小 代码工作正常 当目录文件大小很大时 它会给出此错误消息 我的代码 IEnumerable
  • 首选项列表仅显示第一个元素

    我正在开发一个PreferenceActivity与定制Preference意见 我的问题是我创建了一个视图ListView它只显示第一个元素 我发布我的代码和图像 http imageshack us photo my images 54