Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 449|回复: 0

开发交流:Android 首选项框架ListPreference

[复制链接]

该用户从未签到

发表于 2011-10-24 09:34:18 | 显示全部楼层 |阅读模式
     ListPreference

  显然,必须为用户提供UI 来查看排序选项列表。该列表将包含每个选项的单选按钮,而且默认(或当前)选项应该被预先选中。要使用Android首选项框架解决此问题,所做的工作非常之少。首先,创建首选项XML文件来描述首选项,然后使用预先构建的活动类,该类知道如何显示和持久化首选项,下面是我们的首选项XML文件 flightoptions.xml 。

java代码: < ?xml version="1.0" encoding="utf-8"?>

< PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:key="flight_option_preference"

android:title="@string/prefTitle"

android:summary="@string/prefSummary">

< ListPreference android:key="@string/selected_flight_sort_option"

android:title="@string/listTitle"

android:summary="@string/listSummary"

android:entries="@array/flight_sort_options" android:entryValues="@array/flight_sort_options_values"

android:dialogTitle="@string/dialogTitle" android:defaultValue="@string/flight_sort_option_default_value"/>

< /PreferenceScreen>
复制代码上边说了我们还需要一个Activity类FlightPreferenceActivity,下面使我们的Activity类。这个Activity类继承了PreferenceActivity 代码如下:

java代码: package xiaohang.zhimeng;

import android.os.Bundle;

import android.preference.PreferenceActivity;



public class FlightPreferenceActivity extends PreferenceActivity {



@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

addPreferencesFromResource(R.xml.flightoptions);

}

}
复制代码上面的代码清单,包含了一个表示航班选项示例的首选项设置的XML片段。该包含了一个活动类,也就是我们的FlightPreferenceActivity这个类主要用于加载我们的XML 文件。首先看一下XML。Android提供了一种端到端得首选项框架。这意味着,该框架支持定义首选项,想用户显示设置,以及将用户选择持久化到数据库存储中。 在/res/xml/目录下的XML文件中定义首选项。要向用户显示首选项,编写一个活动类来扩展预定义的 Android类 android.preference.PreferenceActivity,然后使用 addPreferencesFromResource()方法将资源添加到活动的资源集合中。
  在本航班场景中,在/res/xml/目录下创建文件 flightoptions.xml。然后创建活动类FlightPreferenceActivity, 它扩展了 android.preference.PreferenceActivity类。接下来调用addPreferencesFromResource() 传入R.xml.flightoptions。请注意,首选项资源XML指向多个字符串资源。为了确保正确编译,需要向项目中添加多个字符串资源。现在先看一下,上面得代码清单会生成什么样子的UI.





       上边有两个视图。左边的视图称为首选项屏幕,右边的UI是一个列表首选项。当用户选择 Flight Options时, Choose Flight Options视图将以模态对话框的形式出现,其中包含每个选项的单选按钮。用户选择一个选项之后,将立即该选项并关闭视图。当用户返回选项屏幕时,视图将反映前面保存的选择。

  前面已提到,首选项XML 文件和相关的活动类,从上边我们可以看到 我们在XML文件中定义了一个PreferenceScreen ,然后创建ListPreference作为子屏幕。对于 PreferenceScreen,设置了3个属性: key、title和 summary。 key 是一个字符串,可用于以编程的方式表示项 (类似于使用 android:id的方式);title 是屏幕的标题 (My Preferences) ; summary是对屏幕用途的描述。对于列表首选项,设置 key、title和 summary,以及 entries、entryValues、dialogTitle和defaultValue特性。下表总结了这些特性。

     特性说明

java代码: android:key选项的名称或键(比如selected_flight_sort_option)

android:title选项的标题

android:summary选项的简短摘要

android:entries可将选项设置成列表项的文本

android:entryValues定义每个列表项的值。注意:每个列表项有一些文本和 一 个 值。 文本由entries定义,值由entryValues定义。

android:dialogTitle对话框的标题,在视图显示为模态对话框时使用

android:defaultValue项列表中选项的默认值
复制代码上面的代码清单,包含了一个表示航班选项示例的首选项设置的XML片段。该包含了一个活动类,也就是我们的FlightPreferenceActivity这个类主要用于加载我们的XML 文件。首先看一下XML。Android提供了一种端到端得首选项框架。这意味着,该框架支持定义首选项,想用户显示设置,以及将用户选择持久化到数据库存储中。 在/res/xml/目录下的XML文件中定义首选项。要向用户显示首选项,编写一个活动类来扩展预定义的 Android类 android.preference.PreferenceActivity,然后使用 addPreferencesFromResource()方法将资源添加到活动的资源集合中。
刚才上边说到我们有一个首选项视图,就是那个FlightPreferenceActivity ,在这

       这个例子中我们是通过一个菜单跳转到我们的首选项视图的。就是我们有一个MainActivity 这个MainActivity有一个菜单叫Settings当我们点击这个菜单的时候就会跳转到我们的首选项视图了,然后我们修改首选项的内容 当我们再一次回到 MainActivity 的时候就会看到我们修改后的 文本和值,我们通过一个TextView来显示我们还是来看一下效果吧。



       下面这个XML文件就是用来定义我们 这个菜单的,此文件的目录在 /res/menu/mainmenu.xml

java代码: < ?xml version="1.0" encoding="utf-8"?>

< menu xmlns:android="http://schemas.android.com/apk/res/android">

< item android:id="@+id/menu_prefs" android:title="@string/menu_prefs_title" />

< item android:id="@+id/menu_quit" android:title="@string/menu_quit_title" />

< /menu>
复制代码在接下来就是我们的布局文件main.xml了

java代码: < ?xml version="1.0" encoding="utf-8"?>

< LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" androidrientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

< TextView

android:id="@+id/text1"

android:layout_width="fill_parent"

android:layout_height="wrap_content" />

< /LinearLayout>
复制代码只有一个TextView 主要用来显示我们修改首选项之后的文本和值。有了main.xml自然少不了MainActivity了,下面使我们的MainActivity类

java代码: package eoe.demo;



import android.app.Activity;

import android.content.Intent;

import android.content.SharedPreferences;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuInflater;

import android.view.MenuItem;

import android.widget.TextView;



public class MainActivity extends Activity{

private TextView tv = null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
复制代码java代码: setContentView(R.layout.main);

tv = (TextView)findViewById(R.id.text1);

setOptionText();

}

//创建菜单,这个菜单我们在XML文件中定义 这里加载进来就OK

@Override

public boolean onCreateOptionsMenu(Menu menu) {

MenuInflater inflater = getMenuInflater();

//加载我们的菜单文件

inflater.inflate(R.menu.mainmenu, menu);

return true;

}

//菜单选项事件

@Override

public boolean onOptionsItemSelected(MenuItem item) {

if (item.getItemId() == R.id.menu_prefs) {

//当我们点击 Settings 菜单的时候就会跳转到我们的 首选项视图,也就是我们的 FlightPreferenceActivity Intent intent = new Intent().setClass(this, xiaohang.zhimeng.FlightPreferenceActivity.class);

//因为我们要接收上一个Activity 就是我们的首选项视图 返回的数据,所以这里用 startActivityForResult()方法启动我们的首选项视图

//参数一:我们要跳转到哪里

//参数二:回传码

this.startActivityForResult(intent, 0);

}else if (item.getItemId() == R.id.menu_quit) {

//当我们点击Quit菜单退出应用程序 finish();

}

return true;

}

//此方法用来 接收我们上一个Activity 也就是我们的首选项视图 返回的数据,因为我们可能会修改数据

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data);

setOptionText();

}

//这个方法就是用来设置我们 MainActivity 上的TextView的值(就是我们首选项的值)

private void setOptionText(){

/*这个方法比较有意思了

* 第一个参数:用来指定我们存储我们首选项值的文件的名称

* 格式就是 包名_preferences,大家可以看到我的包名就是xiaohang.zhimeng

* 这里如果你不按照这个格式写 比如你不写你当前包名 写成别的,也会生成 当前包名_preferences 这个文件 写或不写它就在那里

* 第二个参数:打开模式

* */

SharedPreferences prefs = getSharedPreferences("xiaohang.zhimeng_preferences", 0);

//这个方法大家去看文档,否则我会越写越乱

String option = prefs.getString(this.getResources().getString(R.string.selected_flight_sort_option), this.getResources().getString(R.string.flight_sort_option_default_value));

//得到我们首选项 所有选项的文本

String[] optionText = this.getResources().getStringArray(R.array.flight_sort_options);

//设置我们 TextView要显示的值

tv.setText("option value is " + option + "(" + optionText[Integer.parseInt(option)] + ")");

}

}
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-10 22:23 , Processed in 0.294049 second(s), 36 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表