Android程序ToDoList增加配置项页面

本文要做的事情就是在前面做的简单的ToDoList程序上增加一个配置项页面(Reference)。这个Reference页面也非常简单:

 

这个ToDoList现在有两个页面,主页面能填写待办事项,然后manu键弹出可以跳转到Reference页面,在Reference页面只有一个checkbox,来给用户确认是否要本地保存(具体的本地存储的功能没有具体实现),Reference页面还有两个按钮,保存和返回。点击保存按钮,程序会存储用户是否已经选定了本地保存,点击返回按钮,页面会跳转到ToDoList页面。

在这个程序中主要是有几个地方需要处理

1 如何在两个Activity中进行切换

这是两个页面,所以我们首先会想到需要两个layout文件,于是我们创建了一个res/layout/preferences.xml,在这个layout中定义好了一个checkbox和两个按钮。现在的问题是当我点击main.xml中的manu按钮的时候,它是会触发onOptionsItemSelected事件的,所以我们需要在这个事件中触发reference页面。这个如何做呢?

大致是有两种方法:

1 在ToDoListActivity中调用setContentView来触发preferences.xml的展现。

2 重新创建一个Activity类Reference,ToDoListActivity中使用Intent触发Reference的启动,绘制等功能。

这两种方法有什么不同呢?

第一种方法相当于html中使用js来让不同的div的意思。它的好处就是简单,对于简单的逻辑和页面完全可以这么做。它的缺点也显而易见,等于是一个Activity控制多个layout,那么在代码层面,会是所有的逻辑都存放在一个类中,对于代码的易用性和维护性都是很大的损失。对于我们这个应用,我们选择第二种方法。

所以我们的onOptionsItemSelected事件代码如下:


1

2

3

4

5

6

7

8

9

public boolean onOptionsItemSelected(MenuItem item) {

 switch (item.getItemId()) {

 case R.id.manu_reference:

       Intent intent = new Intent();

       intent.setClass( this, Reference. class);

       startActivity(intent);

 }

 return true;

}

当我在manu中触发的item是manu_reference(这个已经在配置中设置了id),那么我就启动我需要的Activity。

2 Intent和Activity

Android应用程序的三种核心的组件:Activity,Service, Brocast Receiver。这三种组件互相或者内部进行交互的消息就叫做Intent。比如在我们这个程序中,就是两个Activity需要进行交互,这个时候就需要使用到了Intent了。

Intent有三种用法:

传递给Activity:startActivity(Intent), startActivityForResult()

传递给Service:startService(Intent), bindService()

传递给Broadcast:sendBroadcast(), sendOrderedBroadcast(), sendStickyBroadcast()

在这个例子中,除了从ToDoListActivity跳到Reference,也有从Reference跳到ToDoListActivity(点击返回按钮)。


1

2

3

4

5

6

7

8

9

10

Button cancelReference = (Button)findViewById(R.id. cancel);

           cancelReference.setOnClickListener( new View.OnClickListener() {

                 

                 @Override

                 public void onClick(View v) {

                     Intent intent = new Intent();

                 intent.setClass(Reference.this, ToDoListActivity.class);

                startActivity( intent);

                }

           });

3 配置项存储

关于配置项存储这里使用的是SharePreferences。SharePreferences提供了一个接口让你能存储和获取持久化的key-value数据。你可以持久化的数据类型有:boolean,float,int,long,string。

简单来说:

创建对象使用方法:

getSharePreferences()

getPreferences()

写数据使用方法:

1 使用edit()获取写句柄

2 调用putXXXX()方法

3 调用commit

读数据使用方法:

getXXX()

在这个例子中有这样用到:


1

2

3

4

5

6

7

8

final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);

            boolean isSaveLocal = prefs.getBoolean( IS_SAVE_LOCAL, false);

 

...

 

Editor editor = prefs.edit();

                     editor.putBoolean( IS_SAVE_LOCAL, isChecked);

                     editor.commit();

总结

代码在https://github.com/jianfengye/Android_Works/tree/master/ToDoList

增加配置项也大都选择SharePreferences作为存储方法。至于Android还有其他的存储方法比如:

Internal Storage

External Storage

SQLite Databases

Network Connection

(参考http://developer.android.com/guide/topics/data/data-storage.html

应该在存储代办事项的时候用得到

================================== 
作者:轩脉刃 
出处:(http://www.cnblogs.com/yjf512/) 
版权声明:本文的版权归作者与博客园共有。欢迎转载阅读,转载时须注明本文的详细链接。

时间: 2024-10-30 06:08:21

Android程序ToDoList增加配置项页面的相关文章

Android程序ToDoList

本文的目的是创建一个简单的ToDoList列表. 这个应用的功能是记录我的代办事项,简单到不需要本地存储,所有的代办事项都只是存储在内存中,就是只有程序打开的时候可以增加查看代办事项,当程序关闭的时候,代办事项就清空了. 代码在:https://github.com/jianfengye/Android_Works/tree/master/ToDoList 1 流程 流程和Windows Form的开发一样: 首先是界面设计,res/layout/main.xml 的设计.这里如果使用Andro

android 代码打开某个程序的权限管理页面

问题描述 android 代码打开某个程序的权限管理页面 android 如何用代码打开以下页面,在线等! 解决方案 http://blog.csdn.net/wike163/article/details/6635032 解决方案二: 编程是一种美德,是促使一个人不断向上发展的一种原动力.

Android使用Fragment打造万能页面切换框架_Android

首先我们来回忆一下传统用Activity进行的页面切换,activity之间切换,首先需要新建intent对象,给该对象设置一些必须的参数,然后调用startActivity方法进行页面跳转.如果需要activity返回结果,则调用startActivityForResult方法,在onActivityResult方法中获得返回结果.此外,每一个要展示的activity需要在AndroidManifest.xml文件中注册.而且,如果在某些特定的情况下(比如65536方法数爆炸)要动态加载dex

Android使用Fragment打造万能页面切换框架

首先我们来回忆一下传统用Activity进行的页面切换,activity之间切换,首先需要新建intent对象,给该对象设置一些必须的参数,然后调用startActivity方法进行页面跳转.如果需要activity返回结果,则调用startActivityForResult方法,在onActivityResult方法中获得返回结果.此外,每一个要展示的activity需要在AndroidManifest.xml文件中注册.而且,如果在某些特定的情况下(比如65536方法数爆炸)要动态加载dex

android Fragment切换跳转子页面空指针异常

问题描述 android Fragment切换跳转子页面空指针异常 我有四个fragment,进程序默认加载第一个,我点击了第四个fragment,然后点击它的地址列表!就会报首页轮播图的空指针异常,哪位大神吗有大概思路,给提示下 解决方案 手动抛出一个异常--- 解决方案二: http://www.51zxw.net/study.asp?vip=12576487

Android程序锁的实现以及逻辑_Android

本项目是一个比较有趣的项目源码,可以给其他项目加锁,程序锁的原理是一个"看门狗"的服务定时监视顶层activity,如果activity对应的包名是之前上锁的应用程序的,则弹出一个页面要求输入解锁密码. 效果如下: 1.基本思路 ①.创建已加锁应用的数据库(字段:_id,packagename),如果应用已加锁,将加锁应用的包名维护到数据库中 ②.已加锁+未加锁 == 手机中所有应用(AppInfoProvider) 2.已加锁和未加锁的数据适配器 class MyAdapter ex

Python实现过滤单个Android程序日志脚本分享_python

在Android软件开发中,增加日志的作用很重要,便于我们了解程序的执行情况和数据.Eclipse开发工具会提供了可视化的工具,但是还是感觉终端效率会高一些,于是自己写了一个python的脚本来通过包名来过滤某一程序的日志. 原理 通过包名得到对应的进程ID(可能多个),然后使用adb logcat 过滤进程ID即可得到对应程序的日志. 源码 复制代码 代码如下: #!/usr/bin/env python #coding:utf-8 #This script is aimed to grep

[Android 调试] chrome 调试android 程序中的 webview

问题描述 [Android 调试] chrome 调试android 程序中的 webview RT,pc chrome版本 44.0.2369.0 m ,调试手机中的 chrome 程序没有问题,调试自己应用中的webview时,chrome://inspect/#devices 页面正常,也能看到我的html,点击inspect 时,空白窗口一闪而过,多点击几次 出现 "Cannot load DevTools frontend from an untrusted origin?remote

android程序数据保存在单例模式中,保存在内存中,会oom吗

问题描述 android程序数据保存在单例模式中,保存在内存中,会oom吗 ```package com.amt.appstore.cache; import java.util.ArrayList; import java.util.List; import android.content.pm.PackageInfo; import com.amt.appstore.download.DownItem; import com.amt.appstore.model.AboutFirm; imp