Android中的Intent机制可以实现组件间的交互,通讯,调用。可以是应用程序之间,也可以是应用程序内部Activity与Service的交互或是发送/接受广播等。当然,这些内容在这篇博客都不会谈到。这篇博客只是对Android中利用Intent和Bundle传值的总结。
一、startActivity() + Intent传值
一、startActivity() + Intent传值
在MainActivity.java的布局文件中添加一个按钮:
<Button
android:id="@+id/id_intent_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Intent 传值"
/>
在MainActivity.java的onCreate()方法中:
Button btn = (Button) findViewById(R.id.id_intent_btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(MainActivity.this,SecondActivity.class);
intent.putExtra("gender",1);
intent.putExtra("name","liying");
startActivity(intent);
}
});
至此就实现了把name和gender发送到SecondActivity.接下来就是在SecondActivity.class中取出值。
在SecondActivity.java 的onCreate()方法中:
public class SecondActivity extends AppCompatActivity {
private static final String TAG = "SecondActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
String gender_str = "";
String name = getIntent().getStringExtra("name");
int gender = getIntent().getIntExtra("gender",0);
if (0==gender){
gender_str = "男";
}
if (1==gender){
gender_str = "女";
}
Log.e(TAG, "onCreate: 从MainActivity中传过来的name="+name+" , gender="+gender_str );
}
}
这样我们就通过startActivity() + intent的方式实现了传值。进入到Intent的源代码可以看到,intent传值可以传递各种不同的数据类型。
Intent putExtra(String name, int[] value)
Intent putExtra(String name, float value)
Intent putExtra(String name, byte[] value)
Intent putExtra(String name, long[] value)
Intent putExtra(String name, float[] value)
Intent putExtra(String name, long value)
Intent putExtra(String name, String[] value)
Intent putExtra(String name, boolean value)
Intent putExtra(String name, boolean[] value)
Intent putExtra(String name, short v