大家一定为activity之间传参困扰过。正常的方式是通过intent,一个个的去put值,但是还需要定义很多key值。假如两个actiivty分别是MainActivity(传参方)和SecondActivity(接收方)。传参方需要一个个的put,接收方需要一个个的get,而且需要一个个的赋值给成员变量。太麻烦!而且少传了参数也不方便发现。
有人会说可以传递一个序列化的对象。没错,我就是用这种方式,直不过写成了固定格式。
接下来截图说明:
1在SecondActivity中定义需要外界传递的对象,名字固定为IntentBean。通过构造方法规定必传参数

2在SecondActivity中定义打开方法供外部调用。

3 在MainActivity中打开SecondActivity

4

如果要是startActivityForResult呢?也有简便方法。
1
2

3

4

最后上传这两个activity的代码
package com.liuchuanzheng.testjumpactivity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button1 = findViewById(R.id.btn1);
Button button2 = findViewById(R.id.btn2);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SecondActivity.IntentBean intentBean = new SecondActivity.IntentBean("",
10,"");
SecondActivity.startActivity(MainActivity.this,intentBean);
}
});
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SecondActivity.IntentBean intentBean = new SecondActivity.IntentBean("",
10,"");
SecondActivity.startActivityForResult(MainActivity.this,
intentBean, new SecondActivity.ResultListener() {
@Override
public void onResult(SecondActivity.ResultBean resultBean) {
Toast.makeText(MainActivity.this,
"收到了结果"+resultBean.name,Toast.LENGTH_LONG).show();
}
});
}
});
}
}
package com.liuchuanzheng.testjumpactivity;
import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import java.io.Serializable;
public class SecondActivity extends AppCompatActivity {
private static ResultListener resultListener;
//默认创建一个,保证取值不null。所以里边的默认值很重要
public IntentBean intentBean = new IntentBean();
/**
* 规定参数的开启方法
* @param context
* @param intentBean
*/
public static void startActivity(Context context,IntentBean intentBean){
Intent intent = new Intent(context, SecondActivity.class);
intent.putExtra("IntentBean", intentBean);
context.startActivity(intent);
}
public static void startActivityForResult(Context context,IntentBean intentBean,
ResultListener resultListener){
SecondActivity.resultListener = resultListener;
Intent intent = new Intent(context, SecondActivity.class);
intent.putExtra("IntentBean", intentBean);
context.startActivity(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
parseIntent();
Button button1 = findViewById(R.id.btn1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
if (resultListener != null){
ResultBean resultBean = new ResultBean();
resultBean.name = "刘传政";
resultListener.onResult(resultBean);
resultListener = null;
}
}
});
}
private void parseIntent() {
//获取参数
IntentBean bean = (IntentBean) getIntent().getSerializableExtra("IntentBean");
if (bean != null) {
intentBean = bean;
}
Log.i("liuchuanzheng",intentBean.toString());
}
public static class IntentBean implements Serializable {
String name = "";
int age;
String address = "";
Class fromCls = Object.class;
/**
* 此无参构造方法一般不用,只是一个初次使用者想尽快不考虑参数的情况下看一下此activity效果
* 时,临时用一下。
*/
public IntentBean() {
}
/**
* 这里根据需要,定义自己的必传参数构造方法。
* @param name
* @param age
* @param address 来自那个类。如果此activity会根据不同的来源有不同的显示或处理。
*/
public IntentBean(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
@Override
public String toString() {
return "IntentBean{" +
"name='" + name + '\'' +
", age=" + age +
", address='" + address + '\'' +
", fromCls=" + fromCls +
'}';
}
}
public interface ResultListener{
void onResult(ResultBean resultBean);
}
public class ResultBean {
public String name;
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}