安卓开发------Activity之间的跳转以及基础通信

给自己做个笔记,温故而知新!

介绍

在一个完整的应用之间,会存在多个Activity,这些Activity之间避免不了要进行跳转以及通信(相互至之间传递数据);

Activity之间的跳转

1.跳转到下一个新的Activity

Intent intent =new Intent(TestActivity.this,TestBActivity.class);
intent.putExtra("toTestB",1);
startActivity(intent);

获取传递过来的值

Intent intent =  getIntent();
int getData = intent.getIntExtra("toTestB",0);

2.跳转到下一个新的Activity,然后将数据传递到上一个Activity,并且跳转回到上一个Activity:
用到的方法 onActivityResult与startActivityForResult这个方法配合使用,跳转的activity中使用setResult(int resulttCode,Intent intent)。
第一个Activity中用到的代码:

//发送跳转请求
 private int REQUEST_CODE = 1;
 Intent intent =new Intent(TestActivity.this,TestBActivity.class);
 startActivityForResult(intent,REQUEST_CODE);
 //接收返回的数据
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == REQUEST_CODE && resultCode == RESULT_OK){
           String str = data.getStringExtra("result");
            Log.e(TAG,"result:"+str);
        }
    }

第二Activity用到的代码:

Intent intent = new Intent();
intent.putExtra("result","1");
setResult(RESULT_OK,intent);
finish();

详细请看有关onActivityForResult

Activity之间的通信方式

通信方式有5种

  • Intent跳转时携带数据

  • 借助类的静态变量

  • 借助全局变量Application

  • 借助Service服务

  • 借助外部存储通信
    1.SharedPreference存储数据通信
    2.Android的本地数据库Sqlite,greendao,room
    3.存储于手机上的本地文件

    代码实现

    Intent传递携带参数的数据类型

  • 基本数据类型

  • 传递自定义对象(需要实现Serializable或者Parcelable接口

  • 传递自定义对象集合

               Intent intent = new Intent(Aactivity.this,Bactivity.class);
                /*第一种简单传递数据*/
                intent.putExtra("fromA","easy");
                startActivity(intent);
                /*第二种使用bundle传递数据*/
                Bundle bundle = new Bundle();
                bundle.putString("fromA","bundle");
                intent.putExtras(bundle);
                startActivity(intent);
                /*使用Bundle传递单个对象*/
                User user = new User("zhyang");
                Bundle bundles = new Bundle();
                bundles.putSerializable("user",user);
                intent.putExtras(bundles);
                startActivity(intent);
                /*使用Bundle传递集合对象*/
                User user1 = new User("zhyang");
                User user2 = new User("liyang");
                List<User> lists = new ArrayList<>();
                lists.add(user1);
                lists.add(user2);
                Bundle bundles1 = new Bundle();
                bundles1.putSerializable("user", (Serializable) lists);
                intent.putExtras(bundles1);
                startActivity(intent);

数据接收

 protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_b);
        tv = findViewById(R.id.tv);
        Intent intent = getIntent();
        String dateFromA = intent.getStringExtra("fromA");
        User user = (User) intent.getSerializableExtra("user");
        List<User> users = (List<User>) intent.getSerializableExtra("user");
        tv.setText("从A传递过来的数据:"+ users.size());
    }

使用Bundle传值对比在Intent里直接赋值的好处:
1.减少重复赋值操作(需要传递多次);
2.除了基本类型,还可以传实现Serializable或者Parcelable接口的对象;

转载:其他数据传递方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值