標題: Activity跳轉與傳值 [打印本頁]
作者: 51黑bing 時間: 2016-3-22 22:00
標題: Activity跳轉與傳值
Activity跳轉與傳值,主要是通過Intent類來連接多個Activity,以及傳遞數據。
Intent是Android一個很重要的類。Intent直譯是“意圖”,什么是意圖呢?比如你想從這個Activity跳轉到另外一個Activity,這就是一個意圖。Intent類在Android系統中的作用很大,在此不詳細說了,后面有文章介紹!
Activity跳轉,無返回結果
這是最簡單的Activity跳轉方式。從一個Activity啟動另一個Activity,直接startActivity(newIntent(當前Activity.this, 下一Activity.class))。
1. ((Button) findViewById(R.id.Notepadv1)).setOnClickListener( new OnClickListener() {
2. public void onClick(View v) {
3. startActivity(new Intent (MyAndroidAppActivity.this, Notepadv1.class) );
4. }
5. });
Activity跳轉,返回數據/結果
需要返回數據或結果的,則使用startActivityForResult (Intent intent, intrequestCode)
,requestCode的值是自定義的,用于識別跳轉的目標Activity。
跳轉的目標Activity所要做的就是返回數據/結果,setResult(int resultCode)只返回結果不帶數據,或者setResult(int resultCode, Intent data)兩者都返回!
而接收返回的數據/結果的處理函數是onActivityResult(int requestCode, intresultCode, Intent data),這里的requestCode就是startActivityForResult的requestCode,resultCode就是setResult里面的resultCode,返回的數據在data里面。
MyAndroidAppActivity:
1. static final int SEND_SMS_REQUEST = 0;
2. static final int CALL_REQUEST = 1;
3.
4. ((Button) findViewById(R.id.sms)).setOnClickListener( new OnClickListener() {
5. public void onClick(View v) {
6. Intent intent = new Intent(MyAndroidAppActivity.this, SendSMSActivity.class);
7. startActivityForResult(intent, SEND_SMS_REQUEST);
8. }
9. });
10.
11. @Override
12. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
13. if (requestCode == SEND_SMS_REQUEST) {
14. if (resultCode == RESULT_OK) {
15. Toast.makeText(this, "Send SMS RESULT_OK", Toast.LENGTH_SHORT).show();
16. }else if (resultCode == RESULT_CANCELED) {
17. Bundle bundle = data.getExtras();
18. String phoneno = bundle.getString("phoneNO");
19. Toast.makeText(this, "Send SMS RESULT_CANCELED "+phoneno, Toast.LENGTH_SHORT).show();
20. }
21. }else if (requestCode == CALL_REQUEST) {
22. if (resultCode == RESULT_CANCELED) {
23. Toast.makeText(this, "Call RESULT_CANCELED", Toast.LENGTH_SHORT).show();
24. }
25. }
26. }
SendSMSActivity:
1. ((Button) findViewById(R.id.send)).setOnClickListener( new Button.OnClickListener() {
2. public void onClick(View v) {
3. SendSMSActivity.this.setResult(RESULT_OK);
4. SendSMSActivity.this.finish();
5. }
6. }):
** 注意,在setResult后,要調用finish()銷毀當前的Activity,否則無法返回到原來的Activity,就無法執行原來Activity的onActivityResult函數,看到當前的Activity沒反應。
RESULT_OK和RESULT_CANCELED是系統空間里面的常量,不需要自定義,直接使用就行。
另外在運行過程中,發現按Back鍵后,是可以返回RESULT_CANCELED的,看了SDK doc后,原來真的是那樣,而且不帶有數據的。這意味著,如果你設想在返回RESULT_CANCELED時并返回數據,那么需要截獲Back鍵的事件處理,把原來返回RESULT_CANCELED的核心邏輯copy到事件處理里面。這里給個例子:
1. ((Button) findViewById(R.id.cancel)).setOnClickListener( new Button.OnClickListener() {
2. public void onClick(View v) {
3. // 實例化 Bundle,設置需要傳遞的參數
4. Bundle bundle = new Bundle();
5. bundle.putString("phoneNO", "020-123");
6.
7. SendSMSActivity.this.setResult(RESULT_CANCELED, SendSMSActivity.this.getIntent().putExtras(bundle));
8. SendSMSActivity.this.finish();
9. }
10. });
11.
12. @Override
13. public boolean onKeyDown(int keyCode, KeyEvent event) {
14. // 是否觸發按鍵為back鍵
15. if (keyCode == KeyEvent.KEYCODE_BACK) {
16.
17. // 實例化 Bundle,設置需要傳遞的參數
18. Bundle bundle = new Bundle();
19. bundle.putString("phoneNO", "020-123");
20.
21. setResult(RESULT_CANCELED, this.getIntent().putExtras(bundle));
22. this.finish();
23. return true;
24. }else {
25. return super.onKeyDown(keyCode, event);
26. }
27. }
這里要注意的是,在處理Back鍵事件后return true則表示本事件不再傳遞給其他函數處理,可理解為由當前函數全權負責處理,所以在return前finish當前Activity,保持原來的行為表現,當然我們可以設置為隱藏當前Activity等其他行為。
Activity傳送數據
在上面的代碼中,我們可以看到使用Bundle來存儲數據,并將其putExtras到Intent里面。Bundle使用“名字-值”來存儲數據。那么,從原來的Activity A傳送數據到新的Activity B, Activity B如何獲取傳送過來的Intent參數時呢?最近寫了這樣的一個例子:
In Activity A:
1. // 在某個按鈕響應事件里
2. Intent intent = new Intent(this, TextInputActivity.class);
3. intent.putExtra("Text", mText);
4. intent.putExtra("TextColor", mTextColor);
5. intent.putExtra("TextSize", mTextSize);
6. intent.putExtra("TextBold", mTextBold);
7.
8. startActivityForResult(intent, REQUEST_TEXT);
In Activity B:
1. // in onCreate(Bundle savedInstanceState)
2. Bundle extras = getIntent().getExtras();
3. mText = extras.getString("Text");
4. mTextColor = extras.getInt("TextColor");
5. mTextSize = extras.getFloat("TextSize");
6. mTextBold = extras.getBoolean("TextBold");
作者: cy2011 時間: 2017-4-10 22:56
51黑有你更精彩!
作者: todaljy 時間: 2018-4-27 08:56
51黑有你更精彩!
作者: kazzimir 時間: 2018-7-26 10:49
這帖子也太老了吧
作者: kazzimir 時間: 2018-7-26 10:54
51黑有你更精彩!
歡迎光臨 (http://m.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
国产普通话对白
|
日韩av影片|
亚洲不卡在线观看
|
国产成人精品久久久
|
精品久久久久久久久久久久
|
黄色免费一级片
|
亚洲一区二区三区在线视频
|
欧美国产日韩一区二区
|
日韩精品一区二区三区免费视频
|
色婷婷狠狠
|
亚洲欧美天堂
|
精品影院
|
国产成人精品一区二区三区视频
|
av色在线|
日本成人黄色
|
伊人精品在线
|
成人免费视频视频
|
日韩视频一区二区三区
|
久久国产精品免费
|
成人毛片在线观看
|
国产精品视频专区
|
麻豆成人91精品二区三区
|
久久综合伊人77777蜜臀
|
国产黄色片视频
|
日韩av不卡在线
|
天天综合天天
|
a天堂在线
|
视频一区在线观看
|
中文字幕在线免费播放
|
国产不卡在线观看
|
天天插天天射
|
免费看黄色大片
|
国产一级片免费观看
|
日韩中文视频
|
国产精品久久网
|
亚洲永久免费
|
国产福利精品视频
|
伦一理一级一a一片
|
欧美日韩高清
|
国产成人在线观看免费网站
|
亚洲第一色网
|