TShopping

 找回密碼
 註冊
搜索
查看: 1494|回復: 0
打印 上一主題 下一主題

[教學] Android 頁面回調跳轉(startActivityForResult)

[複製鏈接]
跳轉到指定樓層
1#
發表於 2015-1-19 18:39:46 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
 
Push to Facebook

面試,和一個技術人員交談,他問我:startActivityForResult 知道嗎?當時看回答“知道、跳轉用的”,因為前面有個段startActivity.... 這種頁面跳轉經常用到,他接著問?知道怎麼用嗎?當時愣了.... 確實不清楚(真的很基礎、後悔基礎沒打牢固),,, 然後我就問他.如何用?當時就一一解答,結果面試很輕鬆, 面試也是學習的時候,程序猿要不斷的學習,不斷的努力... 才有美好的生活!哈哈... 閒話聊多叻!


主題:Intent 頁面回調跳轉(StartActivityForResult)


需求:

  一:.mainActivity(A活動) 調轉到EmptionActivity(B活動)購物

  二:選擇對應的商品,操作

  三:攜帶信息數據,返回(A活動)


首先看下原理:


首先看下例子:

MainActivity:

  1. public class MainActivity extends Activity {


  2.         @Override
  3.         protected void onCreate(Bundle savedInstanceState) {
  4.                 super.onCreate(savedInstanceState);
  5.                 setContentView(R.layout.activity_main);
  6.                
  7.                 Button Button_Main=(Button) findViewById(R.id.Button_Main);
  8.                 Button_Main.setOnClickListener(new OnClickListener() {
  9.                        
  10.                         @Override
  11.                         public void onClick(View v) {
  12.                                 Intent intent=new Intent().setClass(MainActivity.this, EmptionActivity.class);
  13.                                 startActivityForResult(intent, 1);
  14.                         }
  15.                 });

  16.         }
  17.        
  18.         /**
  19.          * 回调函数
  20.          * requestCode
  21.          *                      M--->E   M跳转时定义的标识
  22.          * resultCode
  23.          *                      E--->M   E跳转时定义的标识
  24.          * data
  25.          *                      E--->M  携带信息数据
  26.          */
  27.         @Override
  28.         protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  29.                 super.onActivityResult(requestCode, resultCode, data);
  30.                 if(resultCode==10){
  31.                         Log.w("购买物品为: ", data.getStringExtra("computer"));
  32.                 }
  33.                 if(resultCode==20){
  34.                         Log.w("购买物品为: ", data.getStringExtra("book"));
  35.                 }
  36.                
  37. //                Toast.makeText(getApplicationContext(), "什么都没有买!", 3).show();  ? 系统返回这样行吗?
  38.                 if(resultCode==0){
  39.                         Log.w("???", "back 返回键");
  40.                 }
  41.                 //或者  这里用到requestCode  用到复杂判断时候,这里并不复杂!
  42.                 if(requestCode==1&&resultCode==0){
  43.                         Log.w("或者", "back 返回键");
  44.                 }
  45.                
  46.         }

  47. }
複製代碼


EmptionActivity:

  1. public class EmptionActivity extends Activity implements OnClickListener {
  2.         Button computer_Button, book_Button;
  3.         String computer="电脑";
  4.         String book="编程书";
  5.         @Override
  6.         protected void onCreate(Bundle savedInstanceState) {
  7.                 super.onCreate(savedInstanceState);
  8.                 setContentView(R.layout.activity_emption);
  9.                 computer_Button = (Button) findViewById(R.id.computer_Button);
  10.                 book_Button = (Button) findViewById(R.id.book_Button);
  11.                 computer_Button.setOnClickListener(this);
  12.                 book_Button.setOnClickListener(this);

  13.         }

  14.         @Override
  15.         public void onClick(View v) {
  16.                 switch (v.getId()) {
  17.                 case R.id.computer_Button:
  18.                         System.out.println("按下==》电脑Button");
  19.                         Intent intent1=new  Intent(EmptionActivity.this, MainActivity.class).putExtra("computer", computer);
  20.                         //标识列 + Intent
  21.                         setResult(10, intent1);
  22.                         //一定要销毁当前Activity  不然你绝对跳不回去,
  23.                         finish();
  24.                         break;

  25.                 case R.id.book_Button:
  26.                         /**
  27.                          * 讲下
  28.                          * setResult(resultCode,intent)  第一个参数标识
  29.                          * 没有特殊的操作,有的人就用系统提供的标识列(3个  int类型)
  30.                          * RESULT_OK                                   成功    -1
  31.                          * RESULT_CANCELED        取消     0
  32.                          * RESULT_FIRST_USER  可执行  1  
  33.                          * */
  34.                         System.out.println("按下==》编程书Button");
  35.                         Intent intent2=new  Intent(EmptionActivity.this, MainActivity.class).putExtra("book", book);
  36. //                        setResult(RESULT_OK, intent2);
  37.                         setResult(20, intent2);
  38.                         finish();
  39.                         break;
  40.                        
  41.                 //试问?如果顾客不购买物品,直接系统返回键?主页面如何提示?
  42.                        
  43.                 }
  44.         }}
複製代碼

*佈局文件就不貼了、 沒啥意思!

好了、在特殊注意地方已經代碼說明,具體代碼下載:點擊打開鏈接


**************************************

思考:(擴展)

上面實例很簡單、對於系統➹ Back返回!我們也可以用對應的函數來攔截,處理!

  1. <span style="white-space:pre">        </span>@Override
  2.          public boolean onKeyDown(int keyCode, KeyEvent event) {
  3.           // TODO Auto-generated method stub
  4.           if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
  5.                   System.out.println("拦截Back返回键");
  6.              return true;
  7.             }
  8.             return super.onKeyDown(keyCode, event);
  9.            }
複製代碼

在對應的Activity活動重用此方法,可以攔截Back返回鍵!

當然?問題出現了,我在區域或者控件當中,取消攔截返回鍵?怎麼辦?

一句話搞定!

  1. onBackPressed();  //取消返回键拦截!
複製代碼



 

臉書網友討論
*滑块验证:
您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2024-4-20 00:42 , Processed in 0.083430 second(s), 25 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表