传递数据
- 新建 Activity
在项目中右键,选择 New,继续选择中下方的 Activity,最后是 Blank Activity。
此时 Android Studio 会为我们自动添加一个对应的布局文件,为布局文件中的 TextView 添加 ID,以便后续使用。
- 用Intent 发送数据
在主布局文件中新建一个 Button 控件,并在主类中定义它,然后为它设置 Click 的监听事件。
Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(MainActivity.this,Main2Activity.class); i.putExtra("Thanks","Thank you for reading my blog."); startActivity(i); } }); }
- 用 Intent 接收数据
接下来再之前创建的 Activity 中同样新建一个 Intent 进行接受即可。和发送试用的 putExtra 类似,接受也可以用 getStringExtra 。当然了,正对不同的数据类型可以用不同的方法。
private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); Intent i = getIntent(); tv = (TextView)findViewById(R.id.tv); tv.setText(i.getStringExtra("Thanks")); }
传递 Bundle 包
在两个 Activity 之间也可以用 Bundle 包来进行数据的传递,相比上一种方式,这一种可以包含更多的数据,你可以将其认为是一个集合,这也正符合“包”的概念。
新建 Bundle
Bundle 可以嵌套 Bundle
对 Intent 对象使用 putExtras 方法
@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(MainActivity.this,Main2Activity.class); Bundle a = new Bundle(); a.putString("Thanks", "Thank you for reading my blog."); Bundle b = new Bundle(); b.putString("Android","Google"); b.putString("Windows","Microsoft"); a.putBundle("bundle",b); i.putExtras(a); startActivity(i); } });}
- 根据相应的 Key 值获取相应的Bundle数据
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); Intent i = getIntent(); Bundle a2 = i.getExtras(); tv = (TextView)findViewById(R.id.tv); tv.setText(String.format("%s Android属于%s,Windows属于%s", a2.getString("Thanks"), a2.getBundle("bundle").getString("Android"), a2.getBundle("bundle").getString("Windows"))); }
传递自定义对象
Android 开发过程中自然少不了“类”了,那么这种数据又如何传输呢。
- 切记:一定要执行序列化,即加上“implements Serializable”
public class Source implements Serializable{ private int source; private String ID; public int getSource() { return source; } public void setSource(int source) { this.source = source; } public String getID() { return ID; } public void setID(String ID) { this.ID = ID; } public Source(String ID, int source) { this.source = source; this.ID = ID; }}
相应有了前面的了解,大家都可以直接猜到如何使用了,那我就不再啰嗦了。
@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(MainActivity.this,Main2Activity.class); i.putExtra("source",new Source("Player",1000)); startActivity(i); } });}
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); Intent i = getIntent(); Source s = (Source) i.getSerializableExtra("source"); tv = (TextView) findViewById(R.id.tv); tv.setText(String.format("ID是%s,得分是%d", s.getID(), s.getSource())); }
从Activity返回数据
用户需要与应用进行交互,应用需要将用户输入的数据进行返回,所以……
在主 Activity 中定义 Button 和 TextView,前者用于导航至次 Activity , 后者用于显示返回的数据。
在次 Activity 中定义 Button 和 EditText,前者用于确认并返回至主 Activity,后者用于用户输入。
在次 Activity 中:
同样用 Intent 传递数据
用 setResult 设置返回结果
最后用 finish
private Button button ; private EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); editText = (EditText)findViewById(R.id.editText); button = (Button)findViewById(R.id.button2); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(); i.putExtra("info",editText.getText().toString()); setResult(0, i); // 0表示成功 finish(); } }); }
在主 Activity 中:
- 用 startActivityForResult 进行导航,并请求结果
private Button button; private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView)findViewById(R.id.textView); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(MainActivity.this,Main2Activity.class); startActivityForResult(i,0); } }); }
- 重载 onActivityResult 方法,并通过 data 参数获取数据。
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); textView.setText(data.getStringExtra("info")); }
好了,Activity 之间就是这么传递数据的……
零点半了……睡觉……
版权声明:本文为 NoMasp柯于旺 原创文章,未经许可严禁转载!欢迎访问我的博客:http://blog.csdn.net/nomasp