Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android之intent傳值的三種方法

Android之intent傳值的三種方法

編輯:關於Android編程

Android之intent傳值的三種方法分別是:1、startActivity();2、startActivityForResult();3、調用在下個activity自定義的方法“actionStart()”,也就是最佳的方法。

一、一般方式傳值跳轉:startActivity()方法

/* 在MainActivity中定義如下代碼 */

button1.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
            Intent _intent = new 
            Intent(MainActivity.this,TwoActivity.class);
            //在Intent對象當中添加一個鍵值對
            _intent.putExtra(key,value);                 
            startActivity(_intent);
    }
});
public class TwoActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.second_layout);
        Button button2 = (Button) findViewById(R.id.button_2);
        button2.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                //取得從上一個Activity當中傳遞過來的Intent對象
                Intent _intent = getIntent();
                //從Intent當中根據key取得value
                if (_intent != null) {
                    String _value = _intent.getStringExtra(key);
                    Toast.makeText(TwoActivity.this, _value, Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}

二、回調數據式傳值跳轉:startActivityForResult()方法

/* 在MainActivity中定義如下代碼 */

button1.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
             Intent _intent = new Intent(MainActivity.this,TwoActivity.class);
             _intent.putExtra(key, value);
             // 第二個參數是請求碼,只要是一個唯一值
             startActivityForResult(_intent, 1234);
    }
});

 // 由於我們是使用startActivityForResult()方法來啟動TwoActivity的
 // 在TwoActivity被銷毀之後會回調上一個活動的onActivityResult()方法

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        switch (requestCode) {
            case 1234:
                if (resultCode == RESULT_OK) {
                    String returnedData = intent.getStringExtra(key1);
                    Toast.makeText(MainActivity.this, returnedData, Toast.LENGTH_SHORT).show();
                }
                break;
            default:
        }
    }

onActivityResult()方法帶有三個參數,第一個參數requestCode,即我們在啟動活動時傳入的請求碼。第二個參數resultCode,即我們在返回數據時傳入結果碼。第三個參數data,即攜帶著返回數據的Intent。由於在一個活動中有可能調用startActivityForResult()方法去啟動很多不同的活動,每一個活動返回的數據都會回調到onActivityResult()這個方法中,因此我們首先要做的就是通過檢查requestCode的值來判斷數據來源。確定數據是從TwoActivity返回的之後,我們再通過resultCode的值來判斷處理結果是否成功。最後從data中取值並打印出來,這樣就完成了向上一個活動返回數據的工作。

public class TwoActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.second_layout);
        Button button2 = (Button) findViewById(R.id.button_2);

        // 接收從MainaActivity傳遞的數據
        Intent _intent = getIntent();
        if (_intent != null) {
            String _value = _intent.getStringExtra(key);
            Toast.makeText(TwoActivity.this, _value, Toast.LENGTH_SHORT).show();
        }

        button2.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.putExtra(key1,value two activity);
                // 專門用於向上一個活動返回數據
                // 第一個參數用於向上一個活動返回結果碼,一般只使用RESULT_OK或RESULT_CANCELED這兩個值
                // 第二個參數則是把帶有數據的Intent傳遞回去
                setResult(RESULT_OK, intent);
                // 調用了finish()方法來銷毀當前活動
                finish();
            }
        });
    }
}

三、啟動活動的最佳寫法

在真正的項目開發中經常會有對接的問題出現。比如TwoActivity並不是由你開發的,但現在你負責的部分需要有啟動TwoActivity這個功能,而你卻不清楚啟動這個活動需要傳遞哪些數據。這時無非就有兩種辦法,一個是你自己去閱讀TwoActivity中的代碼,二是詢問負責編寫TwoActivity的同事。你會不會覺得很麻煩呢?其實只需要換一種寫法,就可以輕松解決掉上面的窘境。

/* 在MainActivity中定義如下代碼 */

button1.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
            /*最佳數據傳值方法:調用在下個activity自定義的方法*/
            TwoActivity.actionStart(MainActivity.this, data1, data2);
    }
});
public class TwoActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.second_layout);
    }

    /*最佳數據傳值方法*/
    public static void actionStart(Context context, String data1, String data2) {
        Intent intent = new Intent(context, TwoActivity.class);
        intent.putExtra(param1, data1);
        intent.putExtra(param2, data2);
        context.startActivity(intent);
    }
}

實現後,所有TwoActivity中需要的數據都是通過actionStart()方法的參數傳遞過來的,然後把它們存儲到Intent中,最後調用startActivity()方法啟動TwoActivity。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved