Activity传递数据

Activity传递数据

Tags: Android

摘要

打开新Activity,通过Intent传递数据,返回数据

练习Intent的用法

<intent-filter>中可以配置action,category,data用于过滤当前Activity能够响应什么样的请求。
比如示例中设置<data android:scheme="http" />表示数据的协议必须是http协议。

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(“http://www.baidu.com“));
startActivity(intent);
既可以用浏览器也可以用Third Activity。
当然Third Activity不能显示网页,这里只是演示能对应HTTP的请求。

打开拨号视图

Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);

传递数据

Button btn_senddata = (Button) findViewById(R.id.btn_senddata);
btn_senddata.setOnClickListener(new View.OnClickListener() {
    @Override
        public void onClick(View v) {
        Intent intent = new Intent(getApplicationContext(), SendDataActivity.class);
        intent.putExtra("data", "简体中文");
        //1是请求标示,用来接收数据的时候对照。
        startActivityForResult(intent, 1);
    }
});
/**
  * 接收数据的方法
  *
  * @param requestCode
  * @param resultCode
  * @param data
  */
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
//1  表示是当前Activity发出去的,上面写死了,resultCode是和返回数据的Activity约定好的标示
        case 1: {
            if (resultCode == RESULT_OK) {

                String rs = data.getStringExtra("datars");
                Toast.makeText(getApplicationContext(), rs, Toast.LENGTH_SHORT).show();
            }
            break;
        }
        default:
    }
}

接收数据的Activity

package javacore.cn.android_intent;

import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;


public class SendDataActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_send_data);
        final Intent intent = getIntent();
        String data = intent.getStringExtra("data");
        final EditText txt = (EditText) findViewById(R.id.txt_data);
        txt.setText(data);


        //返回数据
        Button btn_return = (Button) findViewById(R.id.btn_return);
        btn_return.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent intent1 = new Intent();
                //txt.getText().toString(),需要toString。否则getStringExtra得不到数据。
                intent1.putExtra("datars", txt.getText().toString());
                setResult(RESULT_OK, intent1);
                finish();

            }
        });

    }


    /**
     * 按下back键的时候也要能够返回数据
     */
    @Override
    public void onBackPressed() {
//        super.onBackPressed();
        EditText txt = (EditText) findViewById(R.id.txt_data);

        Intent intent1 = new Intent();
        //txt.getText().toString(),需要toString。否则getStringExtra得不到数据。
        intent1.putExtra("datars", txt.getText().toString());
        setResult(RESULT_OK, intent1);
        finish();

    }
}

源码地址

https://coding.net/u/javacore/p/android_intent/git