目录
4.基本程序单元Activity(二)
3.多个Activity的使用
3-1.使用Bundle在Activity之间交换数据
3-2.调用另一个Activity并返回结果
4.基本程序单元Activity(二)
3.多个Activity的使用
3-1.使用Bundle在Activity之间交换数据
3-1.使用Bundle在Activity之间交换数据
当在一个Activity中启动另一个Activity时,经常需要传递一些数据。 这时就可以通过Intent来实现,因为Intent通常被称为是两个Activity之间的信使,通过将要传递的数据保存在Intent中,就可以将其传递到另一个Activity中了。在Android中可以将要保存的数据存放在Bundle对象中,然后通过Intent提供的putExtras()方法将要携带的数据保存到Intent中。
注:Bundle 是一个key-value (键-值)对的组合,用于保存要携带的数据包。这些数据可以是boolean、byte、int、long、float、double 和String等基本类型或者对应的数组,也可以是对象或者对象数组。如果是对象或者对象数组时,必须实现Serializable或者Parcelable接口。
例:
activity_main.xml
MainActivity.java
package com.example.activityexchangedata;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=(Button) findViewById(R.id.main_bt1);
button.setonClickListener(new View.onClickListener() {
@Override
public void onClick(View view) {
//获取地区
String site1=((EditText)findViewById(R.id.main_et1)).getText().toString();
//获取街道
String site2=((EditText)findViewById(R.id.main_et2)).getText().toString();
//获取详细地址
String site3=((EditText)findViewById(R.id.main_et3)).getText().toString();
//获取姓名
String name=((EditText)findViewById(R.id.main_et4)).getText().toString();
//获取手机号
String phone=((EditText)findViewById(R.id.main_et5)).getText().toString();
//获取邮箱
String email=((EditText)findViewById(R.id.main_et6)).getText().toString();
if(!"".equals(site1)&&!"".equals(site2)&&!"".equals(site3)&&!"".equals(name)&&
!"".equals(phone)&&!"".equals(email)){
//将输入的信息保存到Bundle中,通过Intent传递到另一个Activity中显示出来
Intent intent=new Intent(MainActivity.this,AddressActivity.class);
//创建并实例化一个Bundle对象
Bundle bundle=new Bundle();
bundle.putCharSequence("name",name);//保存姓名
bundle.putCharSequence("phone",phone);//保存手机号
bundle.putCharSequence("site1",site1);//保存地区
bundle.putCharSequence("site2",site2);//保存街道
bundle.putCharSequence("site3",site3);//保存详细地址
//将Bundle对象添加到Intent对象中
intent.putExtras(bundle);
//启动Activity
startActivity(intent);
}else {
Toast.makeText(MainActivity.this, "请将收货地址填写完整!", Toast.LENGTH_SHORT).show();
}
}
});
}
}
activity_address.xml
AddressActivity.java
package com.example.activityexchangedata;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class AddressActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_address);
//获取Intent对象
Intent intent=getIntent();
//获取传递的Bundle信息
Bundle bundle=intent.getExtras();
//获取显示姓名的TextView组件
TextView name=(TextView) findViewById(R.id.address_tv1);
//获取输入的姓名并显示到TextView组件中
name.setText(bundle.getString("name"));
TextView phone=(TextView) findViewById(R.id.address_tv2);
phone.setText(bundle.getString("phone"));
TextView site=(TextView) findViewById(R.id.address_tv3);
site.setText(bundle.getString("site1")+bundle.getString("site2")
+bundle.getString("site3"));
}
}
3-2.调用另一个Activity并返回结果
在Android应用开发时,有时需要在一个Activity中调用另一个Activity,当用户在第二个Activity中选择完成后,程序将自动返回到第一-个Activity中,第一个Activity 能够获取并显示用户在第二个Activity中选择的结果。例如,用户在修改信息时可以对头像进行修改,在修改头像时首先需要调用选择头像的界面,。在选择头像后会自动返回到修改信息界面,并显示用户选择的新头像。
此功能也可以通过Intent 和Bundle来实现。与在两个Acitvity 之间交换数据不同的是,此处需要使用startActivityForResult()方法来启动另一个Activity。调用startActivityForResult()方法启动Activity后,关闭新启动的Activity 时,可以将选择的结果返回到原Activity 中。startActivityForResult()方法的语法格式如下:
public void startActivityForResult (Intent intent, int requestCode)
该方法将以指定的请求码启动Activity,并且程序将会获取新启动的Activity 返回的结果(通过重写onActivityResult()方法来获取)。requestCode 参数代表了启动Activity的请求码,该请求码的值由开发者根据业务自行设置,用于标志请求来源。
例:
activity_main.xml
MainActivity.java
package com.example.selectavatar;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//隐藏标题栏
ActionBar actionBar=getSupportActionBar();
actionBar.hide();
Button button=(Button) findViewById(R.id.main_btn1);
button.setonClickListener(new View.onClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MainActivity.this,HeadActivity.class);
startActivityForResult(intent,0x11);
}
});
}
protected void onActivityResult(int requestCode,int resultCode,Intent data){
super.onActivityResult(requestCode,resultCode,data);
//判断是否为待处理的结果
if(requestCode==0x11&&resultCode==0x11){
//获取传递的数据包
Bundle bundle=data.getExtras();
//获取选择的头像ID
int imageId=bundle.getInt("imageId");
//获取布局文件中添加的ImageView组件
ImageView imageView=(ImageView) findViewById(R.id.main_iv1);
//显示选择的头像
imageView.setImageResource(imageId);
}
}
}
activity_head.xml
HeadActivity.java
package com.example.selectavatar;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.baseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
public class HeadActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_head);
//隐藏标题栏
ActionBar actionBar=getSupportActionBar();
actionBar.hide();
//定义并初始化保存头像ID的数组
int[] imageId=new int[]{R.drawable.touxiang1,R.drawable.touxiang2,
R.drawable.touxiang3,R.drawable.touxiang4,R.drawable.touxiang5};
GridView gridView=(GridView) findViewById(R.id.head_gv1);
//适配器
baseAdapter adapter=new baseAdapter() {
@Override
public int getCount() {
return imageId.length;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//声明ImageView的对象
ImageView imageView;
if(convertView==null){
//实例化ImageView的对象
imageView=new ImageView(HeadActivity.this);
imageView.setAdjustViewBounds(true);
imageView.setMaxWidth(158);
imageView.setMaxHeight(150);
//设置ImageView的内边距
imageView.setPadding(5,5,5,5);
}else {
imageView=(ImageView) convertView;
}
//为ImageView设置要显示的图片
imageView.setImageResource(imageId[position]);
return imageView;
}
};
//将适配器与GridView关联
gridView.setAdapter(adapter);
gridView.setonItemClickListener(new AdapterView.onItemClickListener() {
@Override
public void onItemClick(AdapterView> adapterView, View view, int position, long l) {
//获取Intent对象
Intent intent=getIntent();
//实例化要传递的数据包
Bundle bundle=new Bundle();
//显示选中的图片
bundle.putInt("imageId",imageId[position]);
//将数据包保存到Intent中
intent.putExtras(bundle);
//设置返回的结果码,并返回调用该Activity的Activity
setResult(0x11,intent);
//关闭当前Activity
finish();
}
});
}
}



