IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android开发-数据回传 -> 正文阅读

[移动开发]Android开发-数据回传

7.1、单向数据传递

Intent对象可以在组件之间转达信息,同时可以携带键值对的数据结构

在初始组件中创建Intent对象时,通过调用重载的putExtra函数即可实现数据的单向传递。

主组件:

 ? ?//拿到跳转按钮
? ? ? ?findViewById(R.id.btn_send).setOnClickListener(new View.OnClickListener() {
? ? @Override
? ? ? ? ? ?public void onClick(View v) {
? ? ? ? ? ? ? ?String msg = ((EditText)findViewById(R.id.Etxt_msg)).getText().toString();
? ? ? ? ? ? ? ?Intent it = new Intent(MainActivity.this, NextAct.class);
? ? ? ? ? ? ? ?it.putExtra("msg",
? ? ? ? ? ? ? ? ? ? ? ? ? ?//如果什么都不输入,则msg的值为null
? ? ? ? ? ? ? ? ? ? ? ? ? ?msg
? ? ? ? ? ? ? ? ? ? ? ? ? );
? ? ? ? ? ? ? ?it.putExtra("names",12.5);
? ? ? ? ? ? ? ?//intent对象可以接受多个键值对(extra 数据)
? ? ? ? ? ? ? ?startActivity(it);
? ? ? ? ?  }
? ? ?  });

显示页面:

? ? ?//如果在主界面没有任何输入,则这里取得的msgstr为null
? ? ?String msgstr = getIntent().getStringExtra("msg");
? ? ?Double doustr=getIntent().getDoubleExtra("msg",0.1);
? ? ?//getDoubleExtra有两个参数(key,default)
? ? ?//参数1:根据key取value的key值; 参数2:如果对应key取value失败,可以使用的默认值
? ? ?if(msgstr.hashCode() == 0)//如果为null
? ? ? ? ?msgstr = "null str";
? ?  ((TextView)findViewById(R.id.txtv_showmsg)).setText("result:" + msgstr+" "+doustr);

7.2、Bundle

当我们在组件之间传递多个数据的时候,如果没传送一个数据就重载一次putExtra()函数,那么代码就会变得十分冗杂

我们引入Bundle包,将要传递的数据打包,直接将包传递

?findViewById(R.id.btn_send_exerc).setOnClickListener(new View.OnClickListener() {
? ? ?@Override
? ? ?public void onClick(View view) {
? ? ? ? ?Bundle bd=new Bundle();
? ? ? ? ?bd.putString("msg","mosang");
? ? ? ? ?bd.putDouble("doub",0.11);
? ? ? ? ?bd.putInt("int",5);
? ? ? ? ?Intent it=new Intent(MainActivity.this,NextAct.class);
? ? ? ? ?it.putExtra("bundle",bd);
? ? ? ? ?startActivity(it);
? ?  }
?});

在接收端:

接受Bundle对象,通过对应的键值来获取数据

?Bundle bd=getIntent().getBundleExtra("bundle");
?String msgstr=bd.getString("msg");
?double dou=bd.getDouble("doub");
?int value=bd.getInt("value");
?((TextView)findViewById(R.id.txtv_showmsg)).setText("result:" + msgstr+" "+dou+" "+value);

7.3、数据回传

在之前的传递中,我们都是从主组件向其他组件传递信息,这里我们要在主组件中获取其他组件传递回来的数据

主页面:

?((Button)findViewById(R.id.btnchoose)).setOnClickListener(new View.OnClickListener() {
? ? ?@Override
? ? ?public void onClick(View v) {
? ? ? ? ?//显式跳转到Image_act界面
? ? ? ? ?Intent it = new Intent(MainActivity.this,Image_act.class);
? ? ? ? ?//1.发起组件调用startActivityForResult()函数(Intent对象,请求码)
? ? ? ? ?startActivityForResult(it,0x123);
? ?  }
?});

图片选择界面:

?
//定义图片数组
?public int[] imgs = new int[]
?{
? ? ?R.drawable.icon1,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
?};
??
??
?//在GridView上设置了一个监听器,重写了其点击事件
?gd.setOnItemClickListener(new AdapterView.OnItemClickListener() {
? ? ?@Override
? ? ?public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
? ? ? ? ?//2.在目的组件中,获取intent对象准备数据
? ? ? ? ?Intent it = getIntent();
? ? ? ? ?Bundle bd = new Bundle();
? ? ? ? ?//资源id号
? ? ? ? ?bd.putInt("imgid",imgs[position]);
? ? ? ? ?it.putExtras(bd);
? ? ? ? ?//通过setResult做标记并指定intent对象(k,v)
? ? ? ? ?setResult(0x123,it);
? ? ? ? ?//参数1.需要匹配的值需要与主界面设置的请求码相匹配才能回传,参数2.提供返回数据的对象
? ? ? ? ?finish();
? ?  }
?});
?//源码:
?public void setOnItemClickListener(AdapterView.OnItemClickListener listener) {
? ? ?throw new RuntimeException("Stub!");
?}
??
?public interface OnItemClickListener {
? ? ?void onItemClick(AdapterView<?> var1, View var2, int var3, long var4);
?}

3.回到发起组件,重写回调函数

//当通过startActivityForResult函数启动其他的安卓组件
?//该组件发生返回动作时,就会调用此函数
?@Override
?protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
? ? ?super.onActivityResult(requestCode, resultCode, intent);
? ? ?//判断是否匹配成功
? ? ?//requestCoded的值与resultCode的值不需要相等,
? ? ?//但requestCoded的值需要与函数参数的int requestCode值相等
? ? ?//resultCode的值需要与函数参数的int resultCode值相等
? ? ?if(requestCoded == 0x123 && resultCode的值需要与函数参数的 == 0x123)
? ?  {
? ? ? ? ?//i取值
? ? ? ? ?Bundle bd = intent.getExtras();
? ? ? ? ?int imgid = bd.getInt("imgid");
? ? ? ? ?ImageView img = (ImageView)findViewById(R.id.imgicon);
? ? ? ? ?img.setImageResource(imgid);
? ?  }
?}

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-04-30 08:51:08  更:2022-04-30 08:52:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 23:28:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码