本文是上一篇文章的优化版:

上文链接地址:http://www.cnblogs.com/zzw1994/p/5016864.html

上文中有很多方法都是过时,并且效率不是很高,主要对JAVA代码进行了优化,下面是优化后的代码:

MainActivity.java:

 package com.zzw.testpreferenceactivity;

 import android.app.Activity;
import android.os.Bundle; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); this.getFragmentManager().beginTransaction()
.replace(android.R.id.content, new SettingFragment()).commit();
} }

SettingFragment.java:

 package com.zzw.testpreferenceactivity;

 import java.util.Iterator;
import java.util.Set; import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.MultiSelectListPreference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.preference.SwitchPreference;
import android.widget.Toast; public class SettingFragment extends PreferenceFragment { private final String CHECKBOXPREFERENCE_KEY1 = "checkbox_key1";
private final String EDITTEXTPREFERENCE_KEY1 = "edit_key1";
private final String LISTPREFERENCE_KEY = "listPreferenc_key";
private final String MULTISELECTLISTPREFERENCE_KEY = "multiSelectListPreference_key";
private final String SWITCHPREFERENCE_KEY = "switchPreference_key1"; private SharedPreferences mSharedPreferences;
private OnSharedPreferenceChangeListener mOnSharedPreferenceChangeListener; private CheckBoxPreference mCheckBoxPreference;
private EditTextPreference mEditTextPreference;
private ListPreference mListPreference;
private MultiSelectListPreference mMultiSelectListPreference;
private SwitchPreference mSwitchPreference; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); // 添加设置的选项
addPreferencesFromResource(R.xml.first_preference); mCheckBoxPreference = (CheckBoxPreference) findPreference(CHECKBOXPREFERENCE_KEY1);
mEditTextPreference = (EditTextPreference) findPreference(EDITTEXTPREFERENCE_KEY1);
mListPreference = (ListPreference) findPreference(LISTPREFERENCE_KEY);
mMultiSelectListPreference = (MultiSelectListPreference) findPreference(MULTISELECTLISTPREFERENCE_KEY);
mSwitchPreference = (SwitchPreference) findPreference(SWITCHPREFERENCE_KEY); // 获取SharedPreferences对象
mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); // 通用的读取设置的某个值的方法
// boolean b = mSharedPreferences.getBoolean("checkbox_key1", false);
// Log.d("checkbox_key1", b+"");
//
// String s = mSharedPreferences.getString("edit_key1", "暂时为空");
// Log.d("edit_key1", s); mOnSharedPreferenceChangeListener = new MyOnSharedPreferenceChangeListener();
} // 数据发生变化时候的监听类设置
private class MyOnSharedPreferenceChangeListener implements OnSharedPreferenceChangeListener { @Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
switch (key) {
case CHECKBOXPREFERENCE_KEY1: boolean b = sharedPreferences.getBoolean(CHECKBOXPREFERENCE_KEY1, false);
mCheckBoxPreference.setSummary(b + "");
break; case EDITTEXTPREFERENCE_KEY1: String s = sharedPreferences.getString(EDITTEXTPREFERENCE_KEY1, "null");
mEditTextPreference.setSummary(s);
break; case LISTPREFERENCE_KEY: String e = mListPreference.getEntry() + "";
String v = mListPreference.getValue();
mListPreference.setSummary(e + " : " + v);
break; case MULTISELECTLISTPREFERENCE_KEY: // String s_entries = "entries:";
//
// CharSequence[] entries = mMultiSelectListPreference.getEntries();
// for (CharSequence c : entries) {
// s_entries += c + "" + "\t";
// }
//
// Set<String> values = mMultiSelectListPreference.getValues();
// Iterator<String> it = values.iterator();
// String s_values = "values:";
// while (it.hasNext()) {
// s_values += it.next().toString() + "\t";
// }
// mMultiSelectListPreference.setSummary(s_entries + "\n" + s_values);
break; case SWITCHPREFERENCE_KEY: boolean boo = sharedPreferences.getBoolean(SWITCHPREFERENCE_KEY, false);
mSwitchPreference.setSummary(boo + ""); break;
default:
break;
}
}
} @Override
public void onResume() {
super.onResume();
// 注册数据发生变化时候的监听
mSharedPreferences.registerOnSharedPreferenceChangeListener(mOnSharedPreferenceChangeListener);
// getPreferenceScreen().getSharedPreferences()
// .registerOnSharedPreferenceChangeListener(mOnSharedPreferenceChangeListener);
} @Override
public void onPause() {
super.onPause();
// 取消数据发生变化时候的监听
mSharedPreferences.unregisterOnSharedPreferenceChangeListener(mOnSharedPreferenceChangeListener);
// getPreferenceScreen().getSharedPreferences()
// .unregisterOnSharedPreferenceChangeListener(mOnSharedPreferenceChangeListener);
}
}

主要优化的地方有:①、使用了switch,提高了效率(Jdk1.7以上,包括1.7)

         ②、把seeting菜单改变时的监听提取了出来,降低了代码的耦合度

seeting菜单界面形成--优化的更多相关文章

  1. Android自定义控件2--优酷菜单界面初始化

    本文开始将逐步去实现下面优酷菜单的效果: 本文地址:http://www.cnblogs.com/wuyudong/p/5912538.html,转载请注明源地址. 本文首先来实现优酷菜单界面初始化工 ...

  2. Winform开发的界面处理优化

    在Winform开发中,客户体验是个很好的参考性指标,如果一个功能使用的时候感觉很流畅,说明我们的程序执行效率还不错,但是随着数据的真多,原先可能流程的地方可能会变得比较卡,这时候就需要追本索源,找到 ...

  3. 设置Firefox(火狐)浏览器的中文菜单/界面

    步骤一: 设置Firefox浏览器的中文菜单/界面.首先需要查一下正在使用的火狐版本号(小生使用的火狐版本是55.0.3).      步骤二: 下载对应版本的xpi中文插件 其次,访问下面的火狐官方 ...

  4. Android Design Support Library(二)用NavigationView实现抽屉菜单界面

    NavigationView在MD设计中非常重要,之前Google也提出了使用DrawerLayout来实现导航抽屉.这次,在Android Design Support Library中,Googl ...

  5. Unity3D_(游戏)卡牌02_主菜单界面

      启动屏界面.主菜单界面.选关界面.游戏界面 卡牌01_启动屏界面 传送门 卡牌02_主菜单界面 传送门 卡牌03_选关界面 传送门 卡牌04_游戏界面    传送门 主菜单界面 (选择左边图标或选 ...

  6. setting菜单界面的形成--未优化

    代码: first_preference.xml: <?xml version="1.0" encoding="utf-8"?> <Prefe ...

  7. 高仿QQ6.0側滑菜单之滑动优化(二)

    好了,昨天已经实现了高仿QQ6.0的側滑大致框架.如有兴趣.能够去看下仿QQ6.0側滑之ViewDragHelper的使用(一) 可是之前的实现.仅仅是简单的能够显示和隐藏左側的菜单,可是特别生硬,并 ...

  8. HelloWorld改编,仿bilibili手机端(一)——侧滑菜单界面布局

    讲解目录: 1.要实现的效果图展示及详细分析HelloWorld项目的xml布局文件(基于navigation drawer activity)        2.简单修改menu及menu相关详解 ...

  9. JAVA:简单添加菜单界面(swing)第二版

    环境:jdk1.8 package com.le.tool; import java.awt.Color; import java.awt.Container; import java.awt.Flo ...

随机推荐

  1. POJ 2096 【期望DP】

    题意: 有n种选择,每种选择对应m种状态.每种选择发生的概率相等,每种选择中对应的每种状态发生的概率相等. 求n种选择和m种状态中每种至少发生一次的期望. 期望DP好别扭啊.要用倒推的方法. dp[i ...

  2. Python子类方法的调用(类方法)

    class S(object): def Test(self): print("TEST") @classmethod def Test02(cls): print("c ...

  3. 在weblogic11g上发布项目遇到的一个错误(不支持web-app_3_0)

    错误信息如下: 消息图标 - 错误 [HTTP:101064][WebAppModule(ssh1:ssh1.war)] Error parsing descriptor in Web appplic ...

  4. @Valid springMVC bean校验不起作用

    @RequestMapping("/add2") public String addStudentValid(@Valid @ModelAttribute("s" ...

  5. JQuery 插件FlexiGrid 之完全配置与使用

    博客分类: Java综合 jQuery配置管理jsonServlet数据结构  自己再做这个的时候.也是找了很多资料..但网上搜索了很多资料. 没有介绍的很全的. 鄙人就在此献丑一下. 来全面的介绍一 ...

  6. Redis服务器配置

    Redis 服务器提供了一些配置选项(configuration option),通过修改这些选项的值,可以改变选项对应功能的行为. 比如:介绍 SELECT 命令时曾经说过,Redis 服务器默认会 ...

  7. Android开发-API指南-Manifest介绍

    App Manifest 英文原文:http://developer.android.com/guide/topics/manifest/manifest-intro.html 采集(更新)日期:20 ...

  8. 【LeetCode】8. String to Integer (atoi) 字符串转整数

    题目: Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input ca ...

  9. ubuntu 开发环境搭建 lisp gcc python perl mysql

    一: lisp sudo apt-get install emacs sudo apt-get install sbcl sudo apt-get install slime emacs里 Alt+x ...

  10. idea 文件名乱码问题的解决

    参考:http://www.cnblogs.com/xingma0910/p/4651889.html idea:文件名乱码: