Activity双向传值-调用页面返回数据

本文介绍Android开发中Activity之间的双向传值方法,通过示例详细解释如何实现从一个Activity向另一个Activity传递数据,并在完成操作后返回原Activity的过程。

Activity双向传值-调用页面返回数据

1.用处

在Android开发中,有时候A页面需要B页面来返回数据,用户在B页面选择或者输入信息后,用户返回A页面,并获取用户在A页面选择的数据

2.原理

与单向传值类似,同样使用Intent对象和Bundle对象,不同的是,此处需要调用startActivityForResult()方法来启动另一个Activity,调用此方法后,在关闭页面时可以将用户输入的数据返回到Activity页面。

startActivityForActivity()方法的语法如下:

Public void startActivityForResult(Intent intent,int requestCode)

将方法设置一个请求吗,启动的Activity完成工作后进行返回,此时调用者可以通过重写onActivityResult()方法来获取返回的数据。requestCode由开发者自行设置,用于标识发起数据的来源

3.实例1-在被调用页面选择喜欢的图片并返回调用页面

调用页面:AActivity.java -----------被调用界面BActivity.java

3.1,AActivityXML

设置一个文本框(阐述用途),设置一个ImageView组件(设置默认显示的图片),设置一个Button按钮(触发事件)

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="${relativePackage}.${activityClass}"
    android:orientation="vertical"
     >
    <TextView
        android:layout_gravity="center_horizontal"
        android:layout_width="match_parent" 
        android:layout_height="wrap_content"
        android:text="点击按钮选择喜欢的图标"
        android:textSize="25dp"
         /> 
    <!-- 设置默认图片 -->
    <ImageView 
        android:id="@+id/image_demoA"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/a1"  
        />
    <Button
        android:id="@+id/btn_demoA" 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="点击选择"
        />
</LinearLayout>

3.2,AActivity.java

原理:
1.设置按钮触发事件,利用startActivityForResult(intent,0xFF);启动另一个活动,并传递发送码
2.重写onActivityResult方法,用来验证发送码,并获取传来的值

public class DemoAActivity extends Activity {
	private Button btndemoA;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_demo_a);	
		btndemoA = (Button) findViewById(R.id.btn_demoA);
		btndemoA.setOnClickListener(new OnClickListener() {		
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intent = new Intent(DemoAActivity.this,DemoBActivity.class);
				`/*启动页面设置发送码*/`
				startActivityForResult(intent, 0xFF);					
			}
		});	
	}	
	`//注意:在onCreate方法外重写onActivityResult方法`
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub		
		if(requestCode==0xFF){
			Bundle bundle = data.getExtras();     `//获取bundle对象`
			int imageID=bundle.getInt("id");     ` //定义图像id`
			ImageView image = (ImageView) findViewById(R.id.image_demoA);`//创建并绑定视图组件改变图片`
			image.setImageResource(imageID);      `//设置图片显示	`
		}
	}	
}

3.3,ABctivity.XML

网格布局,内置网格视图

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     >
     <GridView 
         android:id="@+id/gr_demo2"
         android:gravity="center"     
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_marginTop="20dp"
         android:horizontalSpacing="4dp"       `设置水平列间距`         
         android:numColumns="4"                `设置列数`
         >
 
     </GridView>
</GridLayout>

3.4,ABctivity.XML

原理:设置图片数据源,获取网格组件,设置setOnItemClickListener监听事件,(在监听事件内存储数据,设置返回的结果码),并获取适配器,(在适配器里设置样式,和返回ImageView),最后为网格添加适配器

public class DemoBActivity extends Activity {	
	`//定义数据源--图片资源数组`
	public int[] pic= new int[]{R.drawable.a1,R.drawable.a2,R.drawable.a3,R.drawable.a4,R.drawable.a5
			,R.drawable.a6,R.drawable.a7,R.drawable.a8};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_demo_b);	
		//获取网格组件
		GridView grdemo2 = (GridView) findViewById(R.id.gr_demo2);
		`//设置网格监听事件`
		grdemo2.setOnItemClickListener(new OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> parent, View view, int i, long id) {
				// TODO Auto-generated method stub				
				Intent intent = getIntent();                     `//获取Intent对象`
				Bundle bundle = new Bundle();                    `//创建Bundle对象`
				bundle.putInt("id", pic[i]);                     `//将选中的图片保存于Bundle对象中`
				intent.putExtras(bundle);                        `//将数据保存在intent中`
				setResult(0xFF,intent);                          `// 设置返回的结果码`
				finish();				                         `//选择完成后关闭页面		`		
			}
		});		
		`获取适配器`
		BaseAdapter adapter = new BaseAdapter() {
			@Override
			public long getItemId(int i) {
				// TODO Auto-generated method stub
				return i;
			}			
			@Override
			public Object getItem(int i) {
				// TODO Auto-generated method stub
				return i;
			}			
			@Override
			public int getCount() {
				// TODO Auto-generated method stub
				return pic.length;                                 `//获取资源数组长度`
			}	
			@Override
			public View getView(int i, View view, ViewGroup viewgroup) {
				// TODO Auto-generated method stub
				ImageView imageView ;                               `//声明图像视图组件`
				if(view==null){
					`//如果视图组件为空,则实例化一个控件`
					imageView = new ImageView(DemoBActivity.this);
					imageView.setAdjustViewBounds(true);                     `//设置组件的宽度和高度`
					imageView.setMaxHeight(150);                     `//设置高度`
					imageView.setMaxWidth(150);                    `//设置宽度		`			
					`//设置组件内边距`
					imageView.setPadding(5, 5, 5, 5);
				}else{
					imageView=(ImageView)view;                    `//直接赋值视图组件`
				}				
				imageView.setImageResource(pic[i]);                    `//设置显示图片资源	`			
				return imageView;                   ` //返回图像视图`
			}			
		};		
		grdemo2.setAdapter(adapter);                 `//为网格组件设置适配器`	
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值