fragment和fragment传参

【Android面试八股文】为什么Fragment不能用构造函数传参呢? 综上所述,Android 中 Fragment 构造函数不允许直接传递参数是为了保证 Fragment 在各种生命周期情况下的可靠性和稳定性。通过 setArguments(Bundle) 方法传递参数,能够很好地与系统的生命周期管理机制协调工作,确保了 Fragment 的正确行为和数据的持久性。 阅读详情

  由于Activity相对较为笨重,因而在日常的开发中很多时候会用到Fragment。然而Activity之间是通过Intent进行数据的传递,那Fragment是通过什么来进行传递的呢?Fragment之间又是通过什么方式来进行对象的传递呢?

  Android控件之间传递(Activity和Activity间传递对象、Fragment和Fragment间传递对象)对象有两种实现方式。一种是实现Java提供的Serializable接口,另一种是实现android提供的Parcelable接口。两者之间各有优势;实现Serializable接口的话最简单,直接添加接口的实现即可,但是效率较低;实现Parcelable的话效率较高,但需要自己实现Parcelable的方法。下面看下两种方法的具体实现:

  原有Article类

复制代码
package com.example.news.andoridnewsapp;

public class Article {
    private String title;
    private String linkmd5;
    private String link;
    private String desc;

    public String getLinkmd5() {
        return linkmd5;
    }

    public void setLinkmd5(String linkmd5) {
        this.linkmd5 = linkmd5;
    }

    public String getLink() {
        return link;
    }

    public void setLink(String link) {
        this.link = link;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public String getTitle() {

        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}
复制代码

  一、实现Serializable,只要在public class Article后面添加接口的实现(implements Serializable)即可

复制代码
package com.example.news.andoridnewsapp;

public class Article implements Serializable {
    private String title;
    private String linkmd5;
    private String link;
    private String desc;

    public String getLinkmd5() {
        return linkmd5;
    }

    public void setLinkmd5(String linkmd5) {
        this.linkmd5 = linkmd5;
    }

    public String getLink() {
        return link;
    }

    public void setLink(String link) {
        this.link = link;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public String getTitle() {

        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}
复制代码

  Fragment1进行参数传递

ArticleConententFragment fragment = new ArticleConententFragment();
Bundle args = new Bundle();
args.putSerializable(ARG_ARTICLE, article);

fragment.setArguments(args);

  Fragment2进行参数的接收

(Article) getArguments().getSerializable(ARG_ARTICLE);

  二、实现Parcelable,如果通过Parcelable的方式进行实现的话,需要实现Parcelable接口的方法describeContents(此方法一般不用修改)、writeToParcel(主要是此方法)和创建一个Creator属性。

复制代码
package com.example.news.andoridnewsapp;

import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;

//public class Article implements Serializable {
public class Article implements Parcelable {
    private String title;
    private String linkmd5;
    private String link;
    private String desc;

    public String getLinkmd5() {
        return linkmd5;
    }

    public void setLinkmd5(String linkmd5) {
        this.linkmd5 = linkmd5;
    }

    public String getLink() {
        return link;
    }

    public void setLink(String link) {
        this.link = link;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public String getTitle() {

        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    @Override
    public String toString() {
        return this.title;
    }

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        Bundle bundle = new Bundle();
        bundle.putString("title", getTitle());
        bundle.putString("desc", getDesc());
        bundle.putString("link", getLink());
        bundle.putString("linkmd5", getLinkmd5());
        dest.writeBundle(bundle);
    }

    public static final Creator<Article> CREATOR = new Creator<Article>() {
        @Override
        public Article createFromParcel(Parcel source) {
            Bundle bundle = source.readBundle();
            Article article = new Article();
            article.setTitle(bundle.getString("title"));
            article.setDesc(bundle.getString("desc"));
            article.setLink(bundle.getString("link"));
            article.setLinkmd5(bundle.getString("linkmd5"));
            return article;
        }

        @Override
        public Article[] newArray(int size) {
            return new Article[size];
        }
    };
}
复制代码

  Fragment1进行参数传递

ArticleConententFragment fragment = new ArticleConententFragment();
Bundle args = new Bundle();
//args.putSerializable(ARG_ARTICLE, article);
args.putParcelable(ARG_ARTICLE, article);

fragment.setArguments(args);

  Fragment2进行参数接收

//            mArticle = (Article) getArguments().getSerializable(ARG_ARTICLE);
            mArticle = (Article) getArguments().getParcelable(ARG_ARTICLE);

  这样便可方便地实现对象参数的传递。其实传递的是一个Bundle对象,如果实现的是Serializable接口,则通过Bundle的putSerializable和getSerializable进行设置和获取;如果实现的是Parceable接口,则通过putParceable和getParceable进行设置和获取。

后台管理系统-7-vue3之引入配置文件baseURL mock=false,本地模拟。mock=true,线上模拟。baseURL+url=实际请求的URL。get请求param参数,post请求data参数。 阅读详情

相关推荐

浙大数值分析lab2

最可怕的一道题,题目是这样的 Root of a Polynomial A polynomial of degree nnn has the common form as p(x)=cnxn+cn−1xn−1+⋯+c1x+c0p(x)=c_n x^n + c_{n-1} x^{n-1} + \cdots + c_1 x + c_0p(x)=c​n​​x​n​​+c​n−1​​x​

yao_zou的博客 4793

Android Fragment间对象传递

  由于Activity相对较为笨重,因而在日常的开发中很多时候会用到Fragment。然而Activity之间是通过Intent进行数据的传递,那Fragment是通过什么来进行传递的呢?Fragment之间又是通过什么方式来进行对象的传递呢?   Android控件之间传递(Activity和Activity间传递对象、Fragment和Fragment间传递对象)对象有两种实现方式。一种是...

weixin_34117522的博客 182

python基础语法与数据结构

本文摘要: Python基础语法包含输入输出、函数、变量、数据类型及运算符等内容。输入函数input()获取键盘输入并以字符串存储,输出函数print()可格式化输出数据。函数通过def定义,可带参数和返回值,提高代码复用性。变量无需声明类型,可动态赋值。数据类型包括数字、字符串、布尔及复合类型,可通过type()查看。运算符包含算术、赋值等类型,其中复合赋值运算符如+=可简化运算。类型转换函数如int()、str()等可实现显式类型转换。这些基础语法构成Python编程的核心要素。

MM602388的博客 431

android fragment 传参数,【Android】Fragment之间数据传递的三种方式

一、简介在进行Android开发过程中我们知道Activity的重要性,但是自android3.0之后,android中出现的Fragment重要性其实不亚于Activity,今天简单的介绍一下Fragment之间进行数据传递的三种方式。二、准备工作step 1:创建一个Activity,命名为MainActivity,对应的布局文件如下(只截取核心部分):android:id="@+id/fl_...

weixin_42361635的博客 958

【芯片验证随心记】1.SystemVerilog中,rand和randc的区别?如何用constraint实现randc?

在SystemVerilog里,randc 的“不重复循环”特性是用一个 周期性排列器(permutation engine) 实现的,而这个引擎在 LRM 里并没有公开。我们只能在 “用户空间” 用 rand + constraint 去模仿它的行为。每次随机化只取 queue.pop_front(),用完再洗。在4次随机化内,y会依次出现0,1,2,3各一次(顺序随机)每次随机化,x可能是0-3中的任意值,可能连续多次相同。每次随机化时,在未使用的值里随机挑一个;第5次随机化时,重新生成新的排列周期。

qq_43172512的博客 342

动态规划法:n*m方格前进问题

在一个n*m的方格中,m为奇数,放置有n*m个数,方格中间的下方有一人,此人可按照正前方相临的五个方向(方格)前进但不能越出方格。人每走过一个方格必须取此方格中的数。要求找到一条从底到顶的路径,使其数相加之和为最大。输出和的最大值。 算法设计: 可以使用动态规划方法,从顶部开始,将第二排的每个数加上顶部第一排的最优解,将6排的问题缩小为5排的问题,然后重复该操作,直到底部最后一排,此时

Winifred_1997的博客 4675

Fragment详解之五——Fragment间参数传递

前言:依然没有前言…… 相关文章: 1、《Fragment详解之一——概述》 2、《Fragment详解之二——基本使用方法》 3、《Fragment详解之三——管理Fragment(1)》 4、《Fragment详解之四——管理Fragment(2)》 5、《Fragment详解之五——Fragment间参数传递》6、《Fragment详解之六——如何监听fragment中的回退...

启舰 6万+

超分辨率重建:ESPCN与SRGAN技术对比

超分辨率重建:ESPCN与SRGAN技术对比​ 人工智能,计算机视觉,大模型,AI,超分辨率重建是一种通过技术手段,将低分辨率图像转换为高分辨率图像的过程。它的目的是恢复低分辨率图像中丢失的细节信息,使图像具有更高的清晰度和视觉质量。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 7万+

fragment间相互传值

在Activity中加载Fragment的时候,有时候可能会使用多个Fragment,这个时候就会产生多个fragment切换,并传值到另外一个fragment。也就是说两个fragment之间的参数传递,下面我介绍两种使用的比较多的方法; 方法一、在Activity中定义一个字段、 然后添加set和get方法、也就是说我们在activity中定义一个类似于全局变量的参数,

hemingway 4550

conda install出现CondaValueError: Malformed version string invalid character(s)解决方案

本文主要介绍了conda install出现Solving environment:failed、CondaValueError: Malformed version string invalid character(s),希望能对新手有所帮助。 文章目录 1. 问题描述 2. 解决方案 2.1 步骤一 2.2 步骤二 2.3 步骤三

weixin_43178406的博客 6万+

淋巴结病理数字玻片读取与处理代码

Whole-slide images are generally stored in a multi-resolution pyramid structure. 首先安装openslide模块 pip install openslide-python import os.path as osp import openslide from pathlib import Path...

猫头军师兵书 1275

Fragment之间三种传参方法

在进行Android开发过程中,我们知道Activity的重要性。但是自android3.0之后,android 中出现的Fragment重要性其实与Activity一样。今天小分队就聊下Fragment之间进行数据传递的三种方法; 一、写setXX()方法,在Fragment进行赋值 在MainActivity,声明Fragment对象,然后对象名.方法名,就可以在Fragmnet进行赋值。

lvuchenliu的博客 1391

黑猫带你学eMMC协议第14篇:eMMC FFU详解(Field Firmware Update)

1 前言 1.1 声明 本文依据eMMC JEDEC5.1及个人工作经验整理而成,如有错误请留言。 本文结合eMMC JEDEC5.1协议手册查看效果更佳。 1.2 内容提要 1、ffu相关寄存器有哪些? 2、如何设置ffu? 3、什么是ffu?是否能够更新旧版本的固件到emmc? 4、ffu配置流程图。 2 什么是FFU 主机下载新的固件到eMMC,下载成功后eMMC将固件安装到设备。 3 相关寄存器/命令 SUPPORTED_MODES [493] FFU_FEATURES [492] 该

黑猫奥利奥的博客 4657

Fragment和Activity之间的传参

Fragment向Activity传参用接口回调的方法: (一)在Fragment中 1、先定义接口public interface OnFragmentInteractionListener { public void onButtonClickListener(String msg); }2、声明接口private OnFragmentInteractionListe

费..的博客 852

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Fragment解析创建和传参,动态添加fragment

一下是个人的一些总结。 为fragment创建XML <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent"

sinat_23134455的专栏 1517

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Fragment的创建和传参到底应该怎么写

之前一直写的都是一些干货,没有怎么和大家聊过我自己关于技巧和理解上的一系列问题,这段时间准备聊一聊关于自己理解上的一系列问题,也希望大家一起探讨。各抒己见。 今天想和大家谈谈Fragment到底该如何编写这样的一个问题,为什么会谈到这样的一个问题?其实还是跟了google的风。去年google io大会中,Google向大家推荐了官方的一系列Android开发辅助工具,其中的有几个(例如:Vie...

weixin_42215792的博客 799

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Fragment栈回退和传参方式

当你需要点击返回键是返回上一个Fragment而不是直接退出Activity时,需要把之前的fragment加入返回栈。ft.addToBackStack(null),然后重写退出键的方法。( public boolean onKeyDown(int keyCode, KeyEvent event) )具体的解释点击打开链接我们都知道让AVD在横竖屏切换的时候,当前Activity中的fragment都会通过Fragment.instantiate重新生成,该方法将使用默认的构造函数来生成相应的Fragme

m0_62089210的博客 1176

Fragment构造函数和传参

当试图重构构造函数时,比如: public StudyFragment(String setHint){ }会提示如下错误: Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(Bundle) instead less... (Ctrl+F1)

好好学习,天天向上 1013

Flutter 和 Android原生(Activity、Fragment)相互跳转、传参

本文主要讲解 Flutter 和 Android原生之间,页面相互跳转、传参,但其中用到了两端相互通信的知识,非常建议先看完这篇讲解通信的文章当前案例 Flutter SDK版本:3.13.2。

Lan_Se_Tian_Ma的博客 4621

android fragment 传参数,Fragment与Activity传递参数

1、Activity Fragment Activity一般先传递给FragmentActivity,通过FAct传给附属Fragment2、Activity FragmentActivity 通过Intent传递 如果涉及加载模式传递参数的话,需要通过onNewIntent(Intent intent) 获取intent, getIntent()已经被onNewIntent(...

weixin_42168341的博客 365

Android中Fragment与Activity之间的交互(两种实现方式)

(未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文《Android中Fragment的两种创建方式》,就如何创建Fragment混合布局做了详细的分析,今天就来详细说道说道Fragment与宿主Activity之间是如何实现数据交互的。 我们可以这样理解,宿主Activity中的Fragment之间要实现信息

潘侯爷的博客 2万+

【Android组件核心面试题】Fragment的构造函数为啥不让传参?

我整理了一套Android面试题合集,除了以上面试题,还包含【Java 基础、集合、多线程、虚拟机、反射、泛型、并发编程、Android四大组件、异步任务和消息机制、UI绘制、性能调优、SDN、第三方框架、设计模式、Kotlin、计算机网络、系统启动流程、Dart、Flutter、算法和数据结构、NDK、H.264、H.265.音频编解码、FFmpeg、OpenMax、OpenCV、OpenGL ES。

datian1234的博客 234

安卓项目实战之:关于Fragment构造方法传参问题的解决方案以及两种序列化方案的对比和Parceable形式下boolean类型字段的封装

前言 在我们平常开发中经常会用到Fragment,当我们使用Fragment时一般是通过new Fragment的构造方法来实现,并且在实际的项目开发中,我们经常会用到TabLayout+ViewPager+Fragment的方式来实现tab切换效果,此时所有tab对应的fragment有可能布局都是一致的,唯一的区别就是数据源不同,这时感觉就没有必要定义那么多的Fragment了,我们只需要定义...

智玲君 909

java fragment_初步认识Fragment 之一 & 编写简单的fragment代码

今天初步学习到了Fragment ,如果说activity是一堵墙, 那么它类似于一个便利贴,能将内容写在上面粘贴到任意一面墙上, 而不需要每一堵墙上都写满相同的内容 ,下面我们来了解 怎样编写 Fragment 以及 动静态加载 传参 的代码Fragment 之 静态传参第一步:创建一个 FragmentA.java 文件, 编写如下代码packagecom.lym.week12.frag...

weixin_36221948的博客 907

Android Navigation + Fragment 制作APP主页面导航(步骤 + 源码)

我一直以来都有整理练习大厂面试题的习惯,有随时跳出舒服圈的准备,也许求职者已经很满意现在的工作,薪酬,觉得习惯而且安逸。不过如果公司突然倒闭,或者部门被裁减,还能找到这样或者更好的工作吗?我建议各位,多刷刷面试题,知道最新的技术,每三个月可以去面试一两家公司,因为你已经有不错的工作了,所以可以带着轻松的心态去面试,同时也可以增加面试的经验。我可以将最近整理的一线互联网公司面试真题+解析分享给大家,大概花了三个月的时间整理2246页,帮助大家学习进步。

2401_83641314的博客 1165

Fragment返回栈

//代码实现加载Fragment Fragment1 fragment1 =new Fragment1("111"); FragmentTransaction fTransaction= getFragmentManager().beginTransaction(); fTransaction.replace(R.id.content, fragment1); //若

w2057778w的专栏 896
上一篇: android 按钮点击上去的变暗效果
下一篇: Android 颜色Color
rongbinjava
博客等级 码龄11年 15粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值