当前位置:  编程技术>移动开发
本页文章导读:
    ▪CALL拨通电话        CALL拨打电话 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //调用到button按钮 Button button = (Button) findViewById(R.id.button); .........
    ▪ onSaveInstanceState跟onRestoreInstanceState触发的时机(转载)        onSaveInstanceState和onRestoreInstanceState触发的时机(转载) 先看Application Fundamentals上的一段话: Android calls onSaveInstanceState() before the activity becomes vulnerable to being destroyed by the system, but does not bother .........
    ▪ NSUserDefaults的施用       NSUserDefaults的使用 创建一个user defaults方法有多个,最简单得快速创建方法:   NSUserDefaults *accountDefaults = [NSUserDefaults standardUserDefaults];添加数据到 user defaults:   [accountDefaults setObject:nameField..........

[1]CALL拨通电话
    来源: 互联网  发布时间: 2014-02-18
CALL拨打电话
public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        //调用到button按钮   
        Button button = (Button) findViewById(R.id.button);  
        //为button按钮设置监听器,监听器类型是在本视图的监听器   
        button.setOnClickListener(new View.OnClickListener() {  
              
            public void onClick(View view) {  
                //调用到编辑框的值   
                EditText editText = (EditText) findViewById(R.id.mobile);  
                //新建一个intent对象,进行调用系统的打电话的方法,然后传递号码过去   
                Intent intent = new Intent(Intent.ACTION_CALL , Uri.parse("tel:" +  editText.getText()));  
                //相应事件   
                DialogActivity.this.startActivity(intent);  
            }  
        });  
    }


加入权限:
<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>

    
[2] onSaveInstanceState跟onRestoreInstanceState触发的时机(转载)
    来源: 互联网  发布时间: 2014-02-18
onSaveInstanceState和onRestoreInstanceState触发的时机(转载)
先看Application Fundamentals上的一段话:



Android calls onSaveInstanceState() before the activity becomes vulnerable to being destroyed by the system, but does not bother calling it when the instance is actually being destroyed by a user action (such as pressing the BACK key)



从这句话可以知道,当某个activity变得“容易”被系统销毁时,该activity的onSaveInstanceState就会被执行,除非该activity是被用户主动销毁的,例如当用户按BACK键的时候。

注意上面的双引号,何为“容易”?言下之意就是该activity还没有被销毁,而仅仅是一种可能性。这种可能性有哪些?通过重写一个activity的所有生命周期的onXXX方法,包括onSaveInstanceState和onRestoreInstanceState方法,我们可以清楚地知道当某个activity(假定为activity A)显示在当前task的最上层时,其onSaveInstanceState方法会在什么时候被执行,有这么几种情况:


1、当用户按下HOME键时。

这是显而易见的,系统不知道你按下HOME后要运行多少其他的程序,自然也不知道activity A是否会被销毁,故系统会调用onSaveInstanceState,让用户有机会保存某些非永久性的数据。以下几种情况的分析都遵循该原则


2、长按HOME键,选择运行其他的程序时。


3、按下电源按键(关闭屏幕显示)时。


4、从activity A中启动一个新的activity时。


5、屏幕方向切换时,例如从竖屏切换到横屏时。

在屏幕切换之前,系统会销毁activity A,在屏幕切换之后系统又会自动地创建activity A,所以onSaveInstanceState一定会被执行



总而言之,onSaveInstanceState的调用遵循一个重要原则,即当系统“未经你许可”时销毁了你的activity,则onSaveInstanceState会被系统调用,这是系统的责任,因为它必须要提供一个机会让你保存你的数据(当然你不保存那就随便你了)。




至于onRestoreInstanceState方法,需要注意的是,onSaveInstanceState方法和onRestoreInstanceState方法“不一定”是成对的被调用的,onRestoreInstanceState被调用的前提是,activity A“确实”被系统销毁了,而如果仅仅是停留在有这种可能性的情况下,则该方法不会被调用,例如,当正在显示activity A的时候,用户按下HOME键回到主界面,然后用户紧接着又返回到activity A,这种情况下activity A一般不会因为内存的原因被系统销毁,故activity A的onRestoreInstanceState方法不会被执行


另外,onRestoreInstanceState的bundle参数也会传递到onCreate方法中,你也可以选择在onCreate方法中做数据还原

    
[3] NSUserDefaults的施用
    来源: 互联网  发布时间: 2014-02-18
NSUserDefaults的使用
创建一个user defaults方法有多个,最简单得快速创建方法:
   NSUserDefaults *accountDefaults = [NSUserDefaults standardUserDefaults];

添加数据到 user defaults:
   [accountDefaults setObject:nameField.text forKey:UserDefaultNameKey];
也可以添加基本数据类型int, float, bool等,有相应得方法
   [accountDefaults setBool:YES forKey:UserDefaultBoolKey];

从user defaults中获取数据:
   [accountDefaults objectForKey:NCUserDefaultNameKey]
 
[accountDefaults boolForKey: UserDefaultBoolKey];

要点: NSUserDefaults非常好用,并不需要用户在程序中设置NSUserDefaults的全局变量,需要在哪里使用NSUserDefaults的数据,那么就在哪里创建一个NSUserDefaults对象,然后进行读或者写操作。
     针对同一个关键字对应的对象或者数据,可以对它进行重写,重写之后关键字就对应新的对象或者数据,旧的对象或者数据会被自动清理。


以下是一个我自己写的例子,通过checkBtn按钮进行保存用户名和密码:

     图片一:保存数据之前;或者上一次没有保存数据,第二次启动的界面


     图片二:保存了数据,第二次打开所看到的启动初始界面

- (void)defaultCheck:(id)sender
{  
NSLog(@" check按钮被按下   ");
NSUserDefaults *accountDefaults = [NSUserDefaults standardUserDefaults];
if ([accountDefaults boolForKey:NCUserDefaultBoolForRegister] == NO)
{
  ((UIButton*)sender).selected = YES;
  [accountDefaults setBool:YES forKey:NCUserDefaultBoolForRegister];
  [accountDefaults setObject:nameField.text forKey:NCUserDefaultNameKey];
  [accountDefaults setObject:pwdField.text forKey:NCUserDefaultPasswordKey];
}
else {//YES
  ((UIButton*)sender).selected = NO;
  [accountDefaults setBool:NO forKey:NCUserDefaultBoolForRegister];
  [accountDefaults setObject:nil forKey:NCUserDefaultNameKey];
  [accountDefaults setObject:nil forKey:NCUserDefaultPasswordKey];
}
}

- (void)loadView {
  [super loadView];

nameField = [[UITextField alloc]initWithFrame:CGRectMake(0, 0, 100, 30)];
pwdField = [[UITextField alloc]initWithFrame:CGRectMake(0, 0, 100, 30)];
[nameField setCenter:CGPointMake(160, 100)];
[pwdField setCenter:CGPointMake(160, 150)];

NSUserDefaults *accountDefaults = [NSUserDefaults standardUserDefaults];

        //存的是bool值一定要用boolForKey:获取
        //如果之前已经保存了User Defaults,那么在读取的时候就要将数据读取出来,显示在用户名和密码框中(这里没有加密)。
if ([accountDefaults boolForKey:NCUserDefaultBoolForRegister] == YES) {
  nameField.text = [accountDefaults objectForKey:NCUserDefaultNameKey];
  pwdField.text = [accountDefaults objectForKey:NCUserDefaultPasswordKey];
}
else
{
    [nameField setPlaceholder:@"用户名"];
        [pwdField setPlaceholder:@"密码"];
}

nameField.borderStyle = UITextBorderStyleBezel;
[pwdField setBorderStyle:UITextBorderStyleRoundedRect];
[self.view addSubview:nameField];
[self.view addSubview:pwdField];

UIButton * loginBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[loginBtn setFrame:CGRectMake(0, 0, 50, 30)];
[loginBtn setCenter:CGPointMake(200, 200)];
[loginBtn addTarget:self action:@selector(loginToWeiBo:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:loginBtn];

UIButton * checkBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[checkBtn setFrame:CGRectMake(0, 0, 20, 20)];
[checkBtn setCenter:CGPointMake(160, 180)];

  //选中之后得图标
[checkBtn setBackgroundImage:[UIImage imageNamed:@"lock.png"] forState:(UIControlState)UIControlStateHighlighted];
[checkBtn setBackgroundImage:[UIImage imageNamed:@"lock.png"] forState:(UIControlState)UIControlStateSelected];

     //未选中
[checkBtn setBackgroundImage:[UIImage imageNamed:@"unlock.png"] forState:(UIControlState)UIControlStateNormal];
[checkBtn addTarget:self action:@selector(defaultCheck:) forControlEvents:UIControlEventTouchUpInside];

  //用户名和密码已经保存
if([accountDefaults boolForKey:NCUserDefaultBoolForRegister] == YES)
{
  [checkBtn setSelected:YES];
}

[self.view addSubview:Btn];
}

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3