Android之intent傳值的三種方法

來源:互聯網
上載者:User

Android之intent傳值的三種方法

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。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.