(Android基础)Intent意图实现携带数据跳转和回传

本文介绍了在Android中如何使用Intent进行Activity间的跳转,详细讲解了从页面1点击按钮跳转到页面2选择图片,再返回页面1显示所选图片的过程。在页面1的Activity中,需重写onCreate和onActivityResult方法来接收和处理返回的数据。在页面2的Activity中,设置事件监听器并返回选择的图片数据,返回后记得调用finish()关闭当前Activity。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值