Activity在參數間互傳應該也算是個相當常用上的功能
兩個Activity就像傳球一樣一個丟另一個接
由於我腦容量比較小還是來紀錄一下...以防忘記
現在狀況是ActivityA切換到ActivityB
然後丟一個參數過去
ActivityA找個要切換的地方寫上Intent intent = new Intent();
intent.setClass(this, ActivityB.class);
Bundle bundle = new Bundle();
bundle.putInt("KEY_A", 1);
intent.putExtras(bundle);
startActivity(intent);
注意:
1. intent.setClass(this, ActivityB.class);,這中間的this如果不是直接寫在Avtivity下面那層會出現錯誤,只需要更正為intent.setClass(ActivityA.this, ActivityB.class);
這個this在objectC中就像是self,但是又不大相同,常常會用上,但是要小心
2. bundle.putInt("KEY_A", 1);,bundle中可以依照需求增加更多參數,不限制Integer一種型態,就算是String、boolean、......各種型態都可以,自動補全按下去慢慢挑就好(如下圖)
裡面的("KEY_A", 1)就是常用的key/value,objectC中就是NSDictionary
ActivityB這端來接Bundle bundle = this.getIntent().getExtras();
int key = bundle.getInt("KEY_A");
//System.out.println("key = "+key);
注意:
1. int key = bundle.getInt("KEY_A");這邊就依照key名稱去對應所得到的value,getInt也需要依照類型的不同更改為getString等的方式去更改型態,等號前面的型態也記得要與等號後方相同
--
前面的部份是單純傳過去,那如果Activity傳過去後在ActivityB執行過程中還需要切回ActivityA,或者兩邊可能要同步作一些動作就需要再加上一點東西
ActivityA原來上面那段稍作修正Intent intent = new Intent();
intent.setClass(this, ActivityB.class);
Bundle bundle = new Bundle();
bundle.putInt("KEY_A", 1);
intent.putExtras(bundle);
//startActivity(intent); //修改這行
startActivityForResult(intent, 0);
ActivityA再內加上@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//TODO something
//System.out.println("requestCode = "+requestCode+" || resultCode = "+resultCode+" || data = "+data);
int keyB = data.getExtras().getInt("KEY_B");
//System.out.println("keyB = "+keyB);
}
其中data就是你所回傳的intent,從其中取出bundle所帶的值即可
ActivityB需要執行回傳的地方加上這段Bundle bundle = new Bundle();
bundle.putInt("KEY_B", 1);
setResult(RESULT_OK, (new Intent()).putExtras(bundle));
由於跟上面一樣就不再多加敘述
當然還可以用更多的方式來傳參數,這只是其中的一個解決方案。
相關連結
Android Developers
Android Developers - Activity class
Android Activity 切換傳參數
by Isken Huang - 11/26/2010 0 回應 - Android
Android EditText Listening soft keyboard
EditText是個基礎元件,基本預設按下去就會彈出鍵盤來讓你輸入內容,算是相當人性化,在部份情況下可能只要需要使用"EditText.getText()"來取出文字判斷就好,但在需要即時(如鍵盤按下瞬間就進行判斷)就需要用上其他方式
Listening soft keyboard 檢查軟體鍵盤(就是畫面彈出那個)
EditText.addTextChangedListener(new TextWatcher(){
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
System.out.println("afterTextChanged || 按下後");
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
System.out.println("beforeTextChanged || 按下前");
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
System.out.println("onTextChanged || 按下中");
}
});
但是光這樣還是有些鍵是檢查不到的 EX:ENTER(keyCode = 66)、BACKSPACE(keyCode = 67),必須再搭配下面這方式,下面這方是也可以偵測到外接鍵盤(可能對tablet比較常用)
EditText.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
System.out.println("keyCode = "+keyCode);
//return true = finish || false = track
return false;
}
});
如果只是要得到硬體鍵盤、按鍵,可以使用下面這方式
/* hardware keyboard */
@Override
public boolean onKeyDown(int keyCode, KeyEvent event){
//todo something
System.out.println("keyCode = "+keyCode+" || keyEvent = "+event);
//ex: ENTER
if(keyCode == KeyEvent.KEYCODE_ENTER){
//press ENTER
}
return super.onKeyDown(keyCode, event);
}
那如果都是使用外接鍵盤覺得內建鍵盤很礙眼就是要把他隱藏起來
//先宣告
InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
//隱藏起來 soft keyboard
inputManager.hideSoftInputFromWindow(editText.getWindowToken(), 0);
//叫出鍵盤 soft keyboard
inputManager.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
相關連結
Android Developers
Android Developers - InputMethodManager
Android Developers - TextWatcher
Android Developers - EditText
by Isken Huang - 11/17/2010 0 回應 - Android
iOS 檢查網路狀態
有需要連線至網路的app如果沒了網路就跟死魚一樣(如facebook for iphone)
所以沒網路時一定要告訴使用者你現在沒連網路
Download Code
使用方式
step1.把檔案抓進專案中

step2.加入 SystemConfiguration.framework


step3.在.h檔內import
#import "CheckNetwork.h"
step4.在.m檔中使用
CheckNetwork *checkNetwork = [[CheckNetwork alloc] init];
// YES = connect / NO = death
NSLog(@"connectedToNetwork = %d", [checkNetwork check]);
[checkNetwork release];
其實在官方也有個Sample Code也是同樣的功能
不過...小弟我不才看不太懂(明明就是懶...)
-
相關連結
iOS Developer Library
iOS Developer Library - System Configuration Reference
Download Code
by Isken Huang - 11/14/2010 0 回應 - iOS
iOS 影音媒體播放
一般在使用內建的mediaplay感覺很麻煩
我是個懶人,看到很多code就會想睡
所以就乾脆獨立出個檔案來作比較方便
主要內容如下
1. 播放時全螢幕,調整為適合畫面比例
2. 當device旋轉時影片也會自動跟著轉
3. 只要把URL(string)丟進去就會開始執行了
Download Code
用法一樣很簡單
step1. 把檔案抓進專案中
step2. import MPMediaplayer framework

step3. 在.h將IskenMediaPlayer import進去#import "IskenMediaPlayer.h"
step4. 在.m檔內使用IskenMediaPlayer *player = [[IskenMediaPlayer alloc] init];
[player setMediaURL:@"http://XXXXXXXXXXXXX"];
[self presentModalViewController:player animated:YES];
相關連結
iOS Developer Library
iOS Developer Library - MPMediaLibrary Class Reference
Download Code
by Isken Huang - 11/14/2010 0 回應 - iOS
iOS - 檢查Email格式 check email format for Objc
前幾天稍微找了一下(真的是一下...只點開兩個連結看...)檢查email格式的東西好像沒有針對objc的
反正剛好要用上就順手寫了一下
稍微看過email標準格式後就開始動工
其實也只算是寫個大概...簡單判別一下而已
沒有作email驗證的email address大概90%都是亂寫的吧(至少我自己就是這樣)
大致上判斷以下這些部份
1. 簡單判斷內容是否有特殊字元
2. 是否有手癢多輸入了幾次 @
3. 是否有手癢多輸入幾個 .
4. 結尾有沒有加.com、net、tw...等
Download code
使用方式
1. 先在.h把檔案import進來#import "CheckEmailFormat.h"
2. 把物件new出來並且判斷
只要把check:後面加入要判斷的email address即可
會回覆你YES/NO
如果是NO會自動彈出一個警告告訴user錯誤CheckEmailFormat *checkEmail = [[CheckEmailFormat alloc] init];
//retuen 1 = ok || 0 = error
NSLog(@"This Email address is %d", [checkEmail check:@"abc@11111111111111.com"]);
[checkEmail release];
參考資料
iOS Developer Library
iOS Developer Library - NSString Class Reference
Download code
by Isken Huang - 11/14/2010 0 回應 - iOS