在Activity之间传递参数

1.传递简单数据

2.传递数据 包Bundle

3.传递值对象

4.获取Activity的返回参数

1.传递简单数据

在Activity跳转时如何传递简单数据。

在启动活动时传递数据的思路很简单,Intent中提供了一系列putExtra()方法的重载,可以把我们想要传递的数据暂存在Intent中,启动了另一个活动后,只需要把这些数据再从Intent中取出就可以了。

在activity_main.xml中添加一个Button,并把布局方式改为LinearLayout

新建hello.xml

在里面放入一个不显示任何内容的TextView

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        android:id="@+id/textView_1" />

MainActivity.java

putExtra()方法接收两个参数,第一个参数是键,用于后面从Intent中取值,第二个参数才是真正要传递的数据。

public class MainActivity extends AppCompatActivity {

    //声明变量
    private Button button_1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        //保存Activity的状态
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //获得对象引用
        button_1=(Button)this.findViewById(R.id.button_1);

        //注册监听器,匿名内部类
        button_1.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MainActivity.this,hello.class);
                intent.putExtra("data","Hello jikexueyuan");//传递字符串
                startActivity(intent);
            }
        });
    }
}

 在这里要新建hello.java

通过getIntent()方法将获取到用于启动hello的Intent,然后调用getStringExtra()方法,传入相应的键值,就可以得到传递的数据了。在这里由于我们传递的是字符串,所以使用getStringExtra()方法来获取传递的数据,如果传递的是整型数据,则使用getIntExtra()方法,如果传递的是布尔型数据,则使用getBooleanExtra()方法,以此类推。

public class hello extends AppCompatActivity {

    private TextView textView_1;

    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.hello);

        textView_1=(TextView)findViewById(R.id.textView_1);
        Intent intent=getIntent();
        textView_1.setText(intent.getStringExtra("data"));
    }
}

AndroidManifest.xml

<activity
            android:name="hello"
            android:label="@string/app_name">
        </activity>

运行效果:

当点击按钮1时:

2.传递数据 包Bundle

在Activity跳转时如何传递复杂的数据。

MainActivity.java

public class MainActivity extends AppCompatActivity {

    //声明变量
    private Button button_2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        //保存Activity的状态
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //获得对象引用
        button_2=(Button)this.findViewById(R.id.button_2);

        //注册监听器,匿名内部类
        button_2.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MainActivity.this,new_main.class);
                Bundle bundle=new Bundle();
                bundle.putString("name","jikexueyuan");//传递字符串
                bundle.putInt("age",2);//传递整数类型参数
                bundle.putString("name1","iwen");
                intent.putExtras(bundle);
                startActivity(intent);
            }
        });
    }
}

new_main.java

public class new_main extends AppCompatActivity {

    private TextView textView_2;
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.new_main);

        textView_2=(TextView)findViewById(R.id.textView_2);
        Intent intent=getIntent();
        Bundle data=intent.getExtras();
        textView_2.setText(String.format("name=%s,age=%d,name1=%s",data.getString("name"),
data.getInt("age"),data.getString("name1","leo")));//如若没有传入name1,则显示默认值leo
    }
}

 另一种方法:

MainActivity.java

public class MainActivity extends AppCompatActivity {

    //声明变量
    private Button button_2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        //保存Activity的状态
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //获得对象引用
        button_2=(Button)this.findViewById(R.id.button_2);

        //注册监听器,匿名内部类
        button_2.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MainActivity.this,new_main.class);
                Bundle bundle=new Bundle();
                bundle.putString("name","jikexueyuan");
                bundle.putInt("age",2);
                bundle.putString("name1","iwen");
                //intent.putExtras(bundle);
                intent.putExtra("data",bundle);
                startActivity(intent);
            }
        });
    }
}

new_main.java

public class new_main extends AppCompatActivity {

    private TextView textView_2;
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.new_main);

        textView_2=(TextView)findViewById(R.id.textView_2);
        Intent intent=getIntent();
        //Bundle data=intent.getExtras();
        Bundle data=intent.getBundleExtra("data");
        textView_2.setText(String.format("name=%s,age=%d,name1=%s",data.getString("name"),data.getInt("age"),data.getString("name1","leo")));
    }
}

3.传递值对象

在Activity跳转时如何传递自定义的值对象。

在activity_main中新添加一个button_3

新建User.class

public class User implements Serializable{

    private String name;
    private int 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;
    }

    public User(String name,int age){
        this.name=name;
        this.age=age;
    }
}

MainActivity.java

public class MainActivity extends AppCompatActivity {

    //声明变量
    private Button button_3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        //保存Activity的状态
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //获得对象引用
        button_3=(Button) this.findViewById(R.id.button_3);

        //注册监听器,匿名内部类
        button_3.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MainActivity.this,ding.class);
                intent.putExtra("user",new User("jikexueyuan",2));
                startActivity(intent);
            }
        });
    }
}

ding.java

public class ding extends AppCompatActivity{

    private TextView textView_3;

    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ding);

        textView_3=(TextView)findViewById(R.id.textView_3);
        Intent intent=getIntent();

        User user=(User)intent.getSerializableExtra("user");
        textView_3.setText(String.format("User info(name=%s,age=%d)",user.getName(),user.getAge()));
    }
}

另一种android平台提供的实现方法

User.java

public class User implements Parcelable{

    private String name;
    private int 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;
    }

    public User(String name,int age){
        this.name=name;
        this.age=age;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(getName());
        dest.writeInt(getAge());
    }

    public static final Creator<User> CREATOR=new Creator<User>() {
        @Override
        public User createFromParcel(Parcel source) {
            return new User(source.readString(),source.readInt());
        }

        @Override
        public User[] newArray(int size) {
            return new User[size];
        }
    };
}

 ding.java

public class ding extends AppCompatActivity{

    private TextView textView_3;

    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ding);

        textView_3=(TextView)findViewById(R.id.textView_3);
        Intent intent=getIntent();

        //User user=(User)intent.getSerializableExtra("user");
        User user=intent.getParcelableExtra("user");
        textView_3.setText(String.format("User info(name=%s,age=%d)",user.getName(),user.getAge()));
    }
}

猜你喜欢

转载自dingfan.iteye.com/blog/2384209