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); `//为网格组件设置适配器`
}
}
本文介绍Android开发中Activity之间的双向传值方法,通过示例详细解释如何实现从一个Activity向另一个Activity传递数据,并在完成操作后返回原Activity的过程。
644

被折叠的 条评论
为什么被折叠?



