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类了 ...
随机推荐
- Simulink仿真入门到精通(十八) TLC语言
TLC(Target Language Compiler)是一种为转换为目标语言而存在的额解释性语言,其目的就是将模型中编译出来的rtw文件转换为目标代码(C/C++等).与M语言类似,既可以写成脚本 ...
- go 广度搜索案例(迷宫)
package main import ( "fmt" "os" ) /* *将文档结构读入到切片中(二维数组) *row, col 行数 列数 (文档第一行数 ...
- Vue2.0 【第一季】第2节 v-if v-else v-show 指令
目录 Vue2.0 [第一季]第2节 v-if v-else v-show 指令 第二节 v-if v-else v-show 指令 2.1 v-if指令.v-else指令: 2.2 v-show的使 ...
- javascript 自动选中容器里的文字
前些时间有这么个需求,需要实现选中div里面的文字,选中了的文字可直接按ctrl+v(或者右键)实现黏贴操作. html代码: <div id="text" class=&q ...
- pycharm+keras+yolo3的使用和自选模型的训练中遇到的坑
1.TensorFlow版本的问题 报错:RuntimeError: `get_session` is not available when using TensorFlow 2.0. 解决办法:这个 ...
- 记一次RSA解密过程
有问题可以评论 openssl rsa -pubin -text -modulus -in warmup -in pub.key
- 启动/关闭oracle服务
写一个脚本就可以很方便的打开服务和关闭服务,但是记住要以管理员的身份运行哦! 首先建立两个文件:启动.txt 和关闭.txt [在下面代码里启动的服务名称可能版本不一样,有可能名字不一样,自己对照看看 ...
- dvwa学习之七:SQL Injection
1.Low级别 核心代码: <?php if( isset( $_REQUEST[ 'Submit' ] ) ) { // Get input $id = $_REQUEST[ 'id' ]; ...
- UCF Local Programming Contest 2016 J题(二分+bfs)
题目链接如下: https://nanti.jisuanke.com/t/43321 思路: 显然我们要采用二分的方法来寻找答案,给定一个高度如果能确定在这个高度时是否可以安全到达终点,那我们就可以很 ...
- CTF_WriteUp_HTTP基本认证(Basic access authentication)
HTTP基本认证 在HTTP中,基本认证(英语:Basic access authentication)是允许http用户代理(如:网页浏览器)在请求时,提供用户名和密码 的一种方式.HTTP基本认证 ...