在活动中传递参数

准备:
1. 先创建好一个android程序,并新建一个活动和其的布局文件等。

一 传递一个字符串类型的数据(向下)

//MainActivity
package com.example.sendarguments;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.button1).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                 Intent intent = new Intent(MainActivity.this,TheOtherActivity.class);
                 intent.putExtra("extra_data", "我是一个传递的数据");
                 startActivity(intent);

            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
//TheOtherActivity
package com.example.sendarguments;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class TheOtherActivity extends Activity{
    private TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.theother_layout);
        Intent i = getIntent();
        tv = (TextView) findViewById(R.id.textView1);
        tv.setText(i.getStringExtra("extra_data"));
    }

}

activity_main 中添加了一个id为Button1的按钮
theother_layout 添加了一个id为textView1的TextView

点击按钮后可以在第二个活动中看见第一个活动给其传递的参数

二 传递一个Bundle数据(向下)

//修改MainActivity里的onCreate
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.button1).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                 Intent intent = new Intent(MainActivity.this,TheOtherActivity.class);
                 Bundle b = new Bundle();
                 b.putString("name", "zhangsan");
                 b.putInt("age", 23);
                 intent.putExtras(b);
                 startActivity(intent);

            }
        });
    }
//TheOtherActivity 修改onCreate方法
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.theother_layout);

        Intent i = getIntent();
        Bundle b = i.getExtras();

        tv = (TextView) findViewById(R.id.textView1);
        tv.setText(String.format("name=%s,age=%d,test=%s",         
        b.getString("name"),b.getInt("age"),
        b.getString("test", "没有传过来第三个值")));
    }

还可以直接传递Bundle

//修改MainActivity里的onCreate
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.button1).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                 Intent intent = new Intent(MainActivity.this,TheOtherActivity.class);
                 Bundle b = new Bundle();
                 b.putString("name", "zhangsan");
                 b.putInt("age", 23);
                 intent.putExtra("data", b);
                 startActivity(intent);

            }
        });
    }
//TheOtherActivity 修改onCreate方法
protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.theother_layout);

        Intent i = getIntent();
        Bundle b = i.getBundleExtra("data");

        tv = (TextView) findViewById(R.id.textView1);
        tv.setText(String.format("name=%s,age=%d,test=%s", b.getString("name"),
                b.getInt("age"),b.getString("test", "没有传过来第三个值")));
    }

三 传递一个自定义类型值对象(向下)

新建一个User类

1.Serializable的使用 java内置 操作简单

//User
package com.example.sendarguments;

import java.io.Serializable;

public class User implements Serializable {
    private String name;
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }


}
修改MainActivity里的onCreate
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.button1).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                 Intent intent = new Intent(MainActivity.this,TheOtherActivity.class);

                 intent.putExtra("user", new User("zhangsan",2));
                 startActivity(intent);

            }
        });
    }
//TheOtherActivity 修改onCreate方法
protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.theother_layout);

        Intent i = getIntent();
        User user = (User) i.getSerializableExtra("user");

        tv = (TextView) findViewById(R.id.textView1);
        tv.setText(String.format("User info(name=%s,age=%d)", user.getName(),user.getAge()));
    }

达到的效果与之前是一样的

2.Parcelable的使用 android 内置 效率高 专门面向移动设备 速度快

//User
package com.example.sendarguments;

import java.io.Serializable;

import android.os.Parcel;
import android.os.Parcelable;

public class User implements Parcelable {
    private String name;
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        // TODO Auto-generated method stub
        dest.writeString(getName());
        dest.writeInt(getAge());

    }

    public static final Creator<User> CREATOR =new Creator<User>() {

        @Override
        public User createFromParcel(Parcel source) {
            // TODO Auto-generated method stub
            return new User(source.readString(),source.readInt());
        }

        @Override
        public User[] newArray(int size) {
            // TODO Auto-generated method stub
            return new User[size];
        }

    };
}
//TheOtherActivity
protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.theother_layout);

        Intent i = getIntent();
        User user = (User) i.getParcelableExtra("user");

        tv = (TextView) findViewById(R.id.textView1);
        tv.setText(String.format("User info(name=%s,age=%d)", user.getName(),user.getAge()));
    }

四 向上一个活动传递数据
在TheOther_layout中添加一个id为Button2的按钮

package com.example.sendarguments;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;

public class TheOtherActivity extends Activity{
    private TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.theother_layout);

        findViewById(R.id.button2).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.putExtra("data_return", "hello MainActivity");
                setResult(RESULT_OK,intent);
                finish();

            }
        });
    }

}
//MainActivity
package com.example.sendarguments;



import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.button1).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                 Intent intent = new Intent(MainActivity.this,TheOtherActivity.class);
                 startActivityForResult(intent,10086);  //第二个参数为请求码唯一       
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
        case 10086:
            if(RESULT_OK == resultCode){
                String returnedData = data.getStringExtra("data_return");
                Log.d("MainActivity_Back",returnedData);
            }
            break;

        default:
            break;
        }

    }
}

可以看到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值