在Activity之间跳转可以使用Intent这个桥梁
ps : 菜鸟教程总结
实例:
实现页面1点击按钮跳转到界面2选择图片后跳转回页面1 并显示
首先创建布局文件:activity_my.xml 界面1
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:text="选择你喜欢的APP图标"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/imgicon"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btnchoose"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="选择图标"/>
</LinearLayout>
在创建选择图片的界面2:activity_my_activity2.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<GridView
android:id="@+id/gridicon"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10px"
android:horizontalSpacing="20px"
android:verticalSpacing="10px"
android:numColumns="4">
</GridView>
</RelativeLayout>
接下来编辑第一个Activity逻辑
public class MyActivity extends Activity {
private Button btnchoose;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
//初始化选择按钮
btnchoose = (Button)findViewById(R.id.btnchoose);
btnchoose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//从MyActivity跳转到MyActivity2
Intent it = new Intent(MyActivity.this,MyActivity2.class);
//取回结果 请求码
startActivityForResult(it,0x123);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//判断请求码跟结果响应请求码是否为指定的数值
if(requestCode == 0x123 && resultCode == 0x123)
{
//根据Intent意图 获取Bundle对象 再根据对象取出图片编号
Bundle bd = data.getExtras();
int imgid = bd.getInt("imgid",0);
if (imgid!=0){
//获取布局文件中的ImageView组件,设置路径属性
ImageView img = (ImageView)findViewById(R.id.imgicon);
img.setImageResource(imgid);
}
}
}
}
继承Activity 类 重写onCreate方法 ,同时重写onAcitvityResult方法,这个方法用来接受返回的Intent意图以及携带的数据
判断跳转过去的请求码以及结果响应码是否指定的数据,然后获取数据 进行渲染
值得注意的是:取回的数据可能为空,会导致空指针异常,所以可以加一个默认值0 , 也就是得不到数据后返回默认值,再加个判断就可以避免;
第二个Activity类:MyActivity2 :
public class MyActivity2 extends Activity {
//定义图片
public int[] imgs = new int[]
{
R.drawable.icon2, R.drawable.icon2,R.drawable.icon3,R.drawable.icon4,
R.drawable.icon5,R.drawable.icon6,R.drawable.icon7,R.drawable.icon8,
R.drawable.icon9,R.drawable.icon10
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_activity2);
GridView gd = (GridView)findViewById(R.id.gridicon);
//创建BaseAdapter适配器
BaseAdapter baseAdapter = new BaseAdapter() {
//获得数量
@Override
public int getCount() {
return imgs.length;
}
//获得当前选项
@Override
public Object getItem(int position) {
return position;
}
//获得当前选项对应的id
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if(convertView == null)
{
imageView = new ImageView(MyActivity2.this);
//设置图片宽高
imageView.setAdjustViewBounds(true);
imageView.setMaxHeight(111);
imageView.setMaxWidth(111);
imageView.setPadding(5,5,5,5);
}
else imageView = (ImageView)convertView;
imageView.setImageResource(imgs[position]);
return imageView;
}
};
//设置适配器
gd.setAdapter(baseAdapter);
//监听视图组
gd.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//获取意图
Intent it = getIntent();
//创建Bundle对象,存储数据
Bundle bd = new Bundle();
bd.putInt("imgid",imgs[position]);
//将bd对象存到intent并返回给打开他的Activity
it.putExtras(bd);
//设置相应结果码
setResult(0x123,it);
//最后一定要关闭当前的Activity
finish();
}
});
}
}
定义图片资源,初始化布局文件,添加适配器,添加事件监听器,然后返回被点击的数据,
值得注意 : 返回数据后一定要结束当前的Acitvity,即finish();