android之间的各项信息传输类型
首先是activity想fragment怎样动态的传输数据:
一:activity与fragment之间进行数据传递是,在Activity中将要传递的数据封装在一Bundle中,使用setArgument(Bundel bundel)方法传递数据,在要传递到的Fragment中 使用this.getArgment(),得到传递到的Bundle。
对于FrameLayout用于动态的更新fragment。这个只是带你比较重要:
对应的一个activity中的代码点击事件如下:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button =(Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FirstFragment fragment = new FirstFragment();
Bundle bundle = new Bundle();
bundle.putString("data","传递到的数据");
fragment.setArguments(bundle);//数据传递到fragment中
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.framelayout,fragment);
fragmentTransaction.commit();
}
});
}
}
replace方法的第二个参数不能使用new 类名();这样数据是不能传递的。
对于fragment重大代码如下:
public class FirstFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_first,container,false);
TextView textView = (TextView)view.findViewById(R.id.textview);
Bundle bundle =this.getArguments();//得到从Activity传来的数据
String mess = null;
if(bundle!=null){
mess = bundle.getString("data");
}
textView.setText(mess);
return view;
}
}
这样一来当按下Button的时候,碎片回加载进Framelayout中,并且bundle中的数据也会传递到fragment的textview中;
还可以使用attach函数进行传递参数。
二:activity与activity之间的数据传输第二种方法
通过intent方式传递
(1)传递字符串等
发送端activity
接收端activity
(2)传递一个对象法1(Serializable是java中自带的方法数据存在内存中)
三、Fragment获取Activity中的数据
首先呢,我们可以通过Intent,直接携带参数传递,简单、方便。然而这种方法破坏了fragment的封装性,MainFragment不再是独立的构建单元,因为它现在由某个特定的activity托管,该activity的Intent定义了EXTRA_CRIME_ID的Extra无法在适用于其他任何activity
Activity
public static Intent newIntent(Context context, UUID crime_id){
Intent intent = new Intent(context,MainActivity.class);
intent.putExtra(EXTRA_CRIME_ID,crime_id);
return intent;
}
Fragment
UUID crimeId = (UUID) getActivity().getIntent().getSerializableExtra(MainActivity.EXTRA_CRIME_ID)
crime = CrimeLab.get(getActivity()).getCrime(crimeId);
第二种方法,附加argument给fragment,调用Fragmen.setArguments(Bundle)方法,而且必须在ftagment创建后,添加activity(托管fragment的activity)前完成。
也就是说,再创建MainFragment实例时,直接把传递的数据传递过去,直接在MainFragment里面调用获取数据,所有的业务逻辑都在MainFragment里面实现,实现了模块的独立性。
public static MainFragment newInstance(UUID crime_id) {
Bundle bundle = new Bundle();
bundle.putSerializable(ARG_CRIME_ID, crime_id);
MainFragment fragment = new MainFragment();
fragment.setArguments(bundle);
return fragment;
}
获取argument
先调用Fragment的getArguments()方法,再调用Bundle的限定类型getXxx()方法
UUID crimeId = (UUID) getArguments().getSerializable(ARG_CRIME_ID);
crime = CrimeLab.get(getActivity()).getCrime(crimeId);
其实为了更好的实现模块的独立性,都是在获取数据的Activity或Fragment中创建静态方法实现具体的业务逻辑,而设置数据的Activity或Fragment负责调用静态方法,把需要传递的数据放入参数中即可。
android之间的各项信息传输类型的更多相关文章
- Unity3d和Android之间互相调用
摘抄博客 Unity3d Android SDK接入解析(一)Unity3d 与 Android之间的互相调用,一共四章,一定要看完 No1: 总体来说Unity3d与Android之间的互相调用,是 ...
- Android 获取图片exif信息
使用android api读取图片的exif信息 布局代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/r ...
- android之读取联系人信息
联系人信息被存放在一个contacts2.db的数据库中 主要的两张表 读取联系人 读取联系人需要知道联系人内容提供者的地址,以及对应的操作对象.一般情况下操作对象是的命名方式和表明是一致的. 布局文 ...
- android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序
android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序 在应用里使用了后台服务,并且在通知栏推送了消息,希望点击这个消息回到activity ...
- Android端生成META-INF信息文件的Gradle插件 RapidMetaInfPlugin
来源博客:Wang Jie's Blog 本文链接:<http://blog.wangjiegulu.com/2018/02/05/Android端生成META-INF信息文件的Gradle插件 ...
- 读取 android sys/下的信息
读取 android sys/下的信息 https://github.com/ruw/Internet-Services-projects/tree/master/OffloadPredictor/l ...
- makefile 与android.mk中加信息打印
makefile里面加打印: [table]@echo ' zImage - Compressed kernel image' android.mk里面加信息打印: $(warning TEXT... ...
- 微信小程序--页面与组件之间如何进行信息传递和函数调用
微信小程序--页面与组件之间如何进行信息传递和函数调用 这篇文章我会以我自己开发经验从如下几个角度来讲解相关的内容 页面如何向组件传数据 组件如何向页面传数据 页面如何调用组件内的函数 组件如何调 ...
- Android之间传递数据包
在Android中 ,我们知道,两个activity之间通讯要用到Intent类,传递简单数据的方式我们也已经知道了.那么,如何在两个activity之间传递数据包呢,这就要用到我们的Bundle类了 ...
随机推荐
- 把读取sql的结果写入到excel文件
1.利用pandas模块 # encoding: utf-8 import time import pandas as pd import pymysql def getrel(sql): ''' 连 ...
- (转)协议森林08 不放弃 (TCP协议与流通信)
协议森林08 不放弃 (TCP协议与流通信) 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! TCP(Transportation ...
- 测试必知必会系列- Linux常用命令 - ls
21篇测试必备的Linux常用命令,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1672457.html 列出当 ...
- 使用express+shell在服务器上搭建一套简单的前端部署系统
前言 个人项目越来越多,部署需要频繁操作服务器,所以手动搭建一套简单的部署系统. 效果如图 其中包含 原生html+css+js项目,单页面react, vue, angular项目,实现了一键打包发 ...
- cat、head、sed 三盟友
在linux 中我们必不可少的会使用到这三个命令 他们有什么作用呢? 就是查看文档了,但他的功能远不止于此 来我们学习一下吧 cat [root@ESProbe ~]# cat --help Usag ...
- Redis为什么这么快?
Redis为什么这么快?
- oracle中plsql练习-----在控制台输出1到100以内的素数。
一.思路:首先需要知道素数的概念即质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数. 中心思想是,外循环所有的自然数,内循环折半查询,增加代码的速度,注意:从1开始,需要大于1,但是pl ...
- shell脚本基础-语法
一 变量 [root@T_FOOT-Home2-ZZZ01 ~]# a=hello [root@T_FOOT-Home2-ZZZ01 ~]# echo $a hello [root@T_FOOT-Ho ...
- [SQL]3.26--175+176+177+178+180+181+182
175.组合两个表 题目 Code SELECT FirstName, LastName, City, State FROM Person LEFT JOIN Address --由于需要Person ...
- SQL数据库-基本操作
SQL教程 整理自:廖雪峰的官方网站-SQL教程 目录 SQL教程 SQL快捷键 1.概述 数据类型 SQL操作数据库的能力 语法特点 2. 安装MySQL 运行MySQL 3. 关系模型 3.1 概 ...