Activity 传递ArrayList<bean>数据及其他基本运用

简介: 一、引用1、Android Activity间传值选择,Serializable Or Parcelable2、Android开发艺术探索 第2章 IPC机制 读书笔记3、Andriod Parcelable 读写 boolean(布尔值)的步...

一、引用

1、Android Activity间传值选择,Serializable Or Parcelable
2、Android开发艺术探索 第2章 IPC机制 读书笔记
3、Andriod Parcelable 读写 boolean(布尔值)的步骤

二、实例

1、活动一:FirstActivity传递数据,用Intent或者用Bundle,按照key-value键值对来存放待传递数据


FirstActivity.class

1.1、传递基本类型数据
1.2、传递自定义bean,实现Serializable接口
1.3、传递自定义ArrayList<bean>,实现Parcelable接口
1.4、数据传递:startActivity(intent);单纯传递数据startActivityForResult(intent,requestCode);传递数据+数据返回的code设置
1.5、onActivityResult复写用来接受回传的数据,判断resultCode和requestCode来获取数据

    /**
     * 传递数据
     * 1、基本类型和基本类型list
     * 2、各种bean类
     * 3、各种list<bean>
     * */
    public void sendData(View v){
        //cars
        ArrayList<String> cars = new ArrayList<>();
        cars.add("法拉利");
        cars.add("奔驰");
        cars.add("宾利");

        //girl friend
        GirlFriend girlFriend = new GirlFriend("小丽",21,"C",165,45);

        //cards
        Card card_0 = new Card("工商银行",200,true);
        Card card_1 = new Card("建设银行",456,false);
        ArrayList<Card> cards = new ArrayList<>();
        cards.add(card_0);
        cards.add(card_1);


        Intent it = new Intent(this,SecondActivity.class);

        //基本类型和基本类型array举例--用Bundle一样的
        it.putExtra("name","帅哥");
        it.putExtra("age",23);
        it.putStringArrayListExtra("cars",cars);   //String类型数组
        it.putExtra("girlfriend",girlFriend);
        it.putExtra("cards",cards);


        this.startActivityForResult(it,1001);
    }

    /**
     * 数据回传:
     *
     * resultCode:是否有回传的标识
     * Activity.RESULT_OK = -1
     * Activity.RESULT_CANCELED = 0
     *
     * requestCode:具体回传的code标识
     * */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        //super.onActivityResult(requestCode, resultCode, data);
        if (resultCode != Activity.RESULT_OK)
            return;

        switch (requestCode){
            case 1001:
                String result = data.getExtras().getString("result");
                LogUtil.i("从活动二回传过来的数据:"+result);
                tvResult.setText(result);
                break;
        }
    }

GirlFriend.class

1、实现Serializable接口,并加long serialVersionUID = 1L;
2、静态成员或者方法、transient关键字的并不参加序列化
3、已经默认实现了Parcelable的writeObject和readObject的方法,用Serializable接口是因为这个写法比较简单...

public class GirlFriend implements Serializable{
    private static final long serialVersionUID = 1L;

    private String name;
    private int age;
    private String cup;
    private int height;
    private int weight;

    public GirlFriend(String name,int age,String cup,int height,int weight){
        this.name = name;
        this.age = age;
        this.cup = cup;
        this.height = height;
        this.weight = weight;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getCup() {
        return cup;
    }

    public void setCup(String cup) {
        this.cup = cup;
    }

    public int getHeight() {
        return height;
    }

    public void setHeight(int height) {
        this.height = height;
    }

    public int getWeight() {
        return weight;
    }

    public void setWeight(int weight) {
        this.weight = weight;
    }

    @Override
    public String toString() {
        return "女友信息 {" +
                "姓名='" + name + '\'' +
                ", 年龄=" + age +
                ", 罩杯='" + cup + '\'' +
                ", 身高=" + height +
                ", 体重=" + weight +
                '}';
    }
}

Card.class

1、实现Parcelable接口,写法略微复杂但是可以实现传递ArrayList,但是速度更快
2、实现writeObject和readObject接口
3、注意boolean值的read和write
read : exist = in.readByte()!=0; //boolean的读
write : parcel.writeByte((byte)(exist ?1:0)); //boolean的写

public class Card implements Parcelable{
    private String bank;
    private int money;
    private boolean exist;

    public Card(String bank,int money,boolean exist){
        this.bank = bank;
        this.money = money;
        this.exist = exist;
    }

    public String getBank() {
        return bank;
    }

    public void setBank(String bank) {
        this.bank = bank;
    }

    public int getMoney() {
        return money;
    }

    public void setMoney(int money) {
        this.money = money;
    }

    public boolean isExist() {
        return exist;
    }

    public void setExist(boolean exist) {
        this.exist = exist;
    }


    //============================================================

    public static final Creator<Card> CREATOR = new Creator<Card>() {
        @Override
        public Card createFromParcel(Parcel in) {
            return new Card(in);
        }
        @Override
        public Card[] newArray(int size) {
            return new Card[size];
        }
    };


    /**
     * 对应Creator中的构造器
     * */
    protected Card(Parcel in) {
        bank = in.readString();
        money = in.readInt();
        exist = in.readByte()!=0;   //boolean的读
    }



    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeString(bank);
        parcel.writeInt(money);
        parcel.writeByte((byte)(exist ?1:0)); //boolean的写
    }
}

2、活动二:SecondActivity接受FirstActivity数据,getIntent获取意图,用key-value键值对形式获取数据


SecondActivity.class

1、获取数据:getIntent().getExtras().getXXX();
2、返回数据:setResult(resultCode , Data); resultCode=Activity.RESULT_OK 当然也可以随便设置,不一定非用这个参数,只要和接受地方一致就行了

private void getInfo(){
        Intent it = getIntent();
        if(it != null){
            Bundle bd = it.getExtras();
            String name = bd.getString("name");
            int age = bd.getInt("age");
            ArrayList<String> cars = bd.getStringArrayList("cars");
            GirlFriend friend = (GirlFriend) bd.getSerializable("girlfriend");
            ArrayList<Card> cards = bd.getParcelableArrayList("cards");

            StringBuilder sb = new StringBuilder();
            sb.append("姓名="+name+",年龄="+age+"\n车子:");
            for (String car : cars){
                sb.append(car+"、");
            }
            sb.append(friend.toString()+"\n");
            sb.append("\n银行卡:\n");
            for(Card card : cards){
                sb.append("开户行="+card.getBank()+",存款="+card.getMoney()+",是否拥有="+card.isExist()+"\n");
            }

            LogUtil.i("从活动一传过来的数据:"+sb.toString());
            tvResult.setText(sb.toString());
        }
    }

    /**
     * 返回数据到前一个activity
     * */
    public void returnData(View v){
        Intent it = new Intent();
        it.putExtra("result","活动二结果...");
        setResult(Activity.RESULT_OK,it);
        finish();
    }

3、结果图

img_e70a2830a444919663027a286d180d1d.png
1.png
img_555895249dd79ab151fb024cf9f9092a.png
2.png
img_494bf1aae94be0cb46100ca7eb68aa58.png
back1.png
目录
相关文章
|
应用服务中间件 API Apache
Springboot----项目整合微信支付(处理微信支付回调通知)
Springboot----项目整合微信支付(处理微信支付回调通知)
2564 0
Springboot----项目整合微信支付(处理微信支付回调通知)
|
Android开发
Android 自带的字体库、字体样式
Android 自带的字体库、字体样式
2480 0
Android 自带的字体库、字体样式
|
2月前
|
人工智能 小程序 程序员
Skill详解(2万字详细教程),Skills是什么,如何安装并使用Skills
AI时代必备技能!Skills(智能体技能)是Anthropic提出的可复用能力包,以文件夹形式封装指令、脚本与资源,实现“按需加载”,大幅节省Token。它让大模型从聊天工具升级为专业助手——非技术岗也能零代码快速上手,真正实现人人可用、岗岗必备。
11820 15
Skill详解(2万字详细教程),Skills是什么,如何安装并使用Skills
|
资源调度 JavaScript
|
监控 Java API
Java 异步编程难题拆解实操指南:从入门到精通解决异步编程关键问题
本文深入探讨了Java异步编程的实操技巧,基于Project Reactor与Spring WebFlux等技术框架,通过具体案例解决常见难题。内容涵盖反应式编程基础、回调地狱解决方案、并行任务处理、响应式REST API开发、背压策略应用、微服务异步通信及性能监控等方面。结合代码示例,详细讲解了如何构建高性能异步应用,并总结了最佳实践,帮助开发者掌握异步编程的核心技能。适合希望提升异步开发能力的技术人员阅读。
495 3
|
JavaScript 安全 前端开发
js开发:请解释什么是跨域请求(CORS),以及如何解决跨域问题。
CORS是一种W3C标准,用于解决浏览器同源策略导致的跨域数据访问限制。它通过服务器在HTTP响应头添加标志允许特定源进行跨域请求。简单请求无需预检,而预检请求(OPTIONS)用于询问服务器是否接受非简单请求。服务器端配置响应头如`Access-Control-Allow-Origin`等实现CORS策略,客户端JavaScript则正常发起请求。若配置不当,浏览器将阻止跨域访问,保障安全。
658 2
|
XML Java Android开发
15. 【Android教程】按钮 Button/ImageButton
15. 【Android教程】按钮 Button/ImageButton
694 2
|
ARouter Java Android开发
CC:基于组件总线的Android组件化开源框架
本文详细介绍了CC框架的设计思路与实现原理。通过阅读本文,你可以了解到设计一个基于组件总线方案的组件化框架所涉及到的相关技术点,甚至可以自己设计一套组件化框架出来。
10621 156
|
开发工具
阿里云本机一键登录授权页面修改
阿里云本机一键登录授权页面修改
943 0
|
存储 程序员 项目管理
六年团队Leader实战秘诀|程序员最重要的八种软技能
笔者在带团队的六年中发现,程序员们在职场都有一个共同的困扰:“好像写代码都没什么问题了,日常工作基本上都是应付业务需求的开发,好像找不到其他的更大的附加价值了,我应该找一些什么样的发力点才能让我的价值更突出呢?” 。本文将和大家聊聊程序员的软技能。
六年团队Leader实战秘诀|程序员最重要的八种软技能