Android开发中Fragment主要用来提供更灵活的界面构造形式,顾名思义,英语中fragment一词就是片段的意思。...我们可以创建一个扩展自Fragment的类,在重载的onCreateView方法中填充xml定义的布局,然后在其容器Activity所使用的xml布局文件中,像引入其它视图组件一样对其进行引入。...在作为容器的Activity代码中使用FragmentManager可以获取到对这个Fragment的引用。...类中定义的一个接口,同时在Fragment类中定义该接口类型的一个成员,在重载的onAttach中获取容器activity引用,赋值给该成员。...这样当触发了Fragment中的某个组件的事件时,就能调用该接口的方法,实现Fragment向容器Activity传递消息和数据了。
官方推荐 ViewPager与Fragment一起使用,可以更加方便的管理每个Page的生命周期,这里有标准的适配器实现用于ViewPager和Fragment,涵盖最常见的用例。...(savedInstanceState); //这里我只是简单的用num区别标签,其实具体应用中可以使用真实的fragment对象来作为叶片 mNum = getArguments...效果与ViewPager中添加View的效果是一样的!但是它与View的区别在于它有自己的生命周期,可以随时更改自己的状态便于管理。...事实上使用FragmentPagerAdapter 时,Fragment对象会一直存留在内存中,所以当有大量的显示页时,就不适合用FragmentPagerAdapter了,FragmentPagerAdapter...这个时候你可以考虑使用FragmentStatePagerAdapter ,当使用FragmentStatePagerAdapter 时,如果Fragment不显示,那么Fragment对象会被销毁,(
由于Fragment继承的内容与Activity的继承不太一样,因此跳转时也需要修改一下代码,现在记录一下,以便用到时候复制。...public class pageFragment1 extends Fragment { @Override public View onCreateView(LayoutInflater...ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_page_fragment1...startActivity(i); } }); return view; } } 顺便把Activity中的跳转也记录在下面
这次带来的是新API的使用。 PS: 关于Android的博客文章,以后都会使用Kotlin来进行展示,还没有学习Kotlin的小伙伴抓紧学习波咯,这是Android的趋势。...(requestCode, resultCode, data); } } 在Android应用程序开发中,比较常见的场景是从启动的Activity获取数据,传统的方式是使用startActivityForResult...Google可能已经到了onActivityResult方法的这些问题,因此在androidx.activity:activity:1.2.0-alpha02和androidx.fragment:fragment...非Activity/Fragment中接收数据 在Activity和Fragment中,我们能直接使用registerForActivityResult方法 ,那是因为ConponentActivity...和Fragment基类实现了ActivityResultCaller 接口,在非Activity/Fragment中,如果我们想要接收Activity回传的数据,可以直接使用ActivityResultRegistry
前言 我们使用Activity的时候,可以通过startActivityForResult来启动一个新的Activity,然后在新的Activity中可以用setResult来向前一个Activity...回传一些结果信息,前一个Activity会在onActivityResult中得到这个信息。...那么当我们使用Fragment的形式来作为页面的时候呢?我们知道可以使用setArguments向后面的Fragment传递信息,但是如何回传结果信息?...resultCode, intentData); 这样前一个Fragment就可以在它的onActivityResult处理这些回传信息。...上面可以发现其实就是将前一个Fragment对象交给后面的Fragment持有而已,我们自己创建一个set函数其实也可以实现,但是还是推荐使用Android提供的setTargetFragment,来看看它的源码
说起Android中的Fragment,在使用的时候稍加注意,就会发现存在以下两种: v4包中的兼容Fragment,android.support.v4.app.Fragment 普通的Fragment...,android.app.Fragment 这两种Fragment在使用过程中千万不要来回串,否则会出现莫名其妙的错误 一、不同版本的使用规则 1、3.0以上:xml中可以直接引用fragment...>,这个是android.app.Fragment,在host Activity中可以使用getFragmentManager()来获取FragmentManager; 2、3.0以下: 首先libs...然后在Activity中new Fragment时将自己传递过去即可。...六、Fragment不响应onActivityResult 问题描述:在Fragment中使用startActivityForResult起了一个activity,activity运行完返回结果时,Fragement
可是有了 kotlin-android-extensions 之后,我们可以直接在 Activity、 Fragment、 View 当中使用这个 logoutView 了。...,第一次会最终调用到 findViewById,后面再使用它的话就直接从缓存中获取了。...在 Fragment 中使用 Kae 有什么毛病? 好啦,介绍到此,我们来说说问题。...注意这一行,我们访问 userNameView ,本质上相当于调用前面提到的编译期为 Fragment 生成的一个方法,这个方法会先从缓存查找,接着再去 Fragment 的 View 中查找,那么问题来了...当然,还有一种思路,上文当中我用到了 RxJava,我可以通过自定义一个 UI 生命周期相关的 Scheduler,在生命周期发生变化时,一方面可以统一取消请求,另一方面,也可以控制在 UI 已经无效时
在Android中,我们如果想在Activity之间双向传递数据,需要使用startActivityForResult启动,然后在onActivityResult中处理返回,另外申请权限也是类似的步骤。...但是这样的处理方式会让我们的代码变得非常复杂,并且也无法保证在 Activity 发送或接收数据时参数的类型安全。...ActivityResult使用 使用ActivityResult先添加依赖: dependencies { // 在 https://developer.android.google.cn/jetpack...:activity:$activity_version" implementation "androidx.fragment:fragment:$fragment_version” } 然后先看看最简单的使用方式...但是实际上返回是在onActivityResult函数中,这里就需要关注mPendingResults,在ActivityResultRegistry中的doDispatch函数中为它赋予了数据,而doDispatch
背景 在Android应用程序开发中,启动一个Activity不一定是单项操作,从启动的Activity获取数据是常见的场景,最传统的方式是通过Intent携带数据,然后使用startActivityForResult...在介绍如何使用之前,先为大家介绍Activity Results API 中两个重要的组件:ActivityResultContract和ActivityResultLauncher。...(在 Kotlin 中,使用 Void?...在非Activity/Fragment的类中接收Activity的结果 在Activity和Fragment中,我们能直接使用registerForActivityResultAPI ,那是因为ConponentActivity...和Fragment基类实现了ActivityResultCaller 接口,在非Activity/Fragment中,如果我们想要接收Activity回传的数据,可以直接使用 ActivityResultRegistry
而且 Fragment 比较轻量,本身由 Activity 来管理(而不像 Activity 由 Android 系统服务管理),在不同的布局结构中重用 Fragment 可以优化屏幕空间和用户体验。...Android中Fragment都是由 FragmentManager 来管理的。...那么如何解决解决方案1中的问题。 问题5,多进程的 Activity 在切换标签后如何处理?Back 键如何处理?...1,实现的问题,使用多Task的实现方式,在Android中需要声明Activity的TaskAffinity,而 TaskAffinity 不能在代码中动态声明,而只能写在配置文件中,导致不同Tab打开的同一个...4,使用 LocalActivityManager,实现对每个 Tab 中 Fragments 的独立管理。
由于 Window 的 decorView 默认是设置有 10dp 的padding。需要获取到decorView后设置其padding为(0, 0, 0, 0...
--请求访问使用照相设备--> android:name="android.permission.CAMERA" /> 2 设置标志(回传码) // 拍照回传码 public...可以放在公共类中,设置为全局变量 3 在相应的java类中: // 拍照的照片的存储位置 private String mTempPhotoPath; // 照片所在的Uri地址...) { fragment4ImageView0 = findViewById(R.id.fragment4ImageView0); if (resultCode == MainActivity.RESULT_OK...是否有findViewById 如果是在onActivityResult中设置的setImage 即使在onCreate中findView 了也是不行的 要在onActivityResult中findView...:用户没有录音操作,但app在后台调用AudioRecord时,会让系统认为是在录音,状态栏就有红色录音提示 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/125285
是Android 3.0(API 11)提出的,为兼容低版本,v4包中也开发了一套Fragment API,现已移到androidx维护。...onDetach(): 将该Fragment从Activity中删除、替换完成时回调该方法,在onDestroy()方法后一定会回调onDetach()方法,该方法只会被调用一次。...3、如何获取 FragmentManger Activity 中通过 getSupportFragmentManager获取 Fragment 中通过 getChildFragmentManager获取...6、startActivityForResult 之坑 在 Fragment 中请勿使用 getActivity().startActivityForResult(),这样 Framgnet 中的 onActivityResult...onResume(), 所有ViewPager中的Fragment都会执行onResume(),所以在很容易造成网络丢包或者网络堵塞等问题,所以Fragment使用懒加载机制,只有当Fragment真正对用户可见时
版状态时,可以添加、移除或更改 API。...因此 Alpha 版本不适合在生产上使用 ❞ ? 来自我的另一篇博客 target fragment API 被弃用 其实 target fragment API 早已被弃用 ?...fragment 之间传递数据的新方式 前文提到,在相同的 FragmentManager 中可以使用 target fragment API 来在 fragment 间传递数据,但这种方式需要直接访问目标...fragment 的实例,这很危险,因为目标 fragment 的状态是未知的 因此官方提供了这样的 API,它允许在一个 fragment 上设置结果,并将该结果在 fragment 的适当的生命周期中使用..., and Future (Android Dev Summit '19) 中提到了 fragment 间通信的问题,未来 fragment 会整合 fragment 自身和其内部 view 的生命周期
文章目录 一、如何解决 startActivityForResult 被弃用? 二、ActivityResultContract 该如何使用?...可以明显的看到,在androidx.activity1.2.0-alpha04时开始,Android中这位你调用过无数次的startActivityForResult和onActivityResult,...但倘若编写一个稍复杂的页面,需要同时请求相册、需要在其它Activity选择数据并回调、需要判断权限等等时,继续使用startActivityForResult,会导致onActivityResult里掺杂各种嵌套及判断...同时,引用一个官方文档的警告 ↓ 注意:虽然在 fragment 或 activity 创建完毕之前可安全地调用 registerForActivityResult(),但在 fragment 或 activity...如果有需要,我会再写一篇使用较少的在单独的类中接收 Activity 结果和Activity Result API的源码解析。技术有限,若文中有错误遗漏之处,尽情谅解,也欢迎指正共同进步。
一、思考 当Activity A启动一个Activity B后,B finish,我们可能需要处理B返回的值,此时,我们可能就需要用到了onActivityResult,需要在Activity A中重写实现...当然,在这种前提是我们处理逻辑都是放在Activity A类中,那么假如我们是在一个其他类,不是Activity或者Fragment的情况呢?...当我看到Google的开源的lifecycle库中的HolderFragment的做法,感觉眼前一亮。在Activity或者Fragment中添加一个空壳的Fragment,作为一个生命周期的监听。...所以我产生以下思路:通过给当前的Activity添加一个空壳的Fragment,往空壳的Fragment中传入Listener,然后由该Fragment去启动新的Activity,最终在这个空壳的Fragment...二、撸码 1、 首先,我们对外暴露一个Fragment需要实现的接口,让外部使用这个接口,而不是直接使用这个Fragment,做接口隔离。
隐藏虚拟键盘 网上可以搜到各种方法,实际测试中,我的开发用机中,仅仅下面这个方法有效,记录一下。...imm.hideSoftInputFromWindow( v.getApplicationWindowToken( ) , 0 ); } } 在Activity...启动时,默认隐藏软键盘:** 在AndroidManifest.xml中找到你得Activity ,为它添加属性: android:windowSoftInputMode="stateAlwaysHidden..." 输入遮挡Edittext时的处理: 在AndroidManifest.xml中找到你得Activity ,为它添加属性: android:windowSoftInputMode="adjustPan
前言 Fragment,简称碎片,可以简单地认为它就是一个“控件”,更加具体一点就是“View控制器”。它自身有生命周期。在开发中,我们经常用到,再熟悉不过了。...使用 Fragment 封装权限申请 使用 Fragment 优雅处理 onActivityResult Activity reCreate 的时候用来存储数据 这篇文章主要讲解以下内容 使用 Fragment...---- Fragment 封装权限申请 Android 6.0 动态权限机制,大家再熟悉不过了,如果我们没有对其进行封装,那我们每一次在申请权限的时候,大概需要以下几步: 这里我们已拨打电话为例子进行讲解...当我们申请权限申请的时候,先查找我们当前 Activity 是否存在代理 fragment,不存在,进行添加,并使用代理 Fragment 进行申请权限 第二步:在代理 Fragment 的 onRequestPermissionsResult...---- 使用 Fragment 优雅处理 onActivityResult 我们先来看一下没封装之前 onActivityresult 的处理方式 我们先来看下正常情况下启动 Activity 和接收回调信息的方式
作者 / Yacine Rezgui 无论您是在应用中请求某项权限,从文件管理系统中选择某个文件,还是期望从第三方应用中获取到某些数据,都会涉及到在 Activity 之间传递数据,而这也正是 Android...之前,想要从启动的 Activity 中获取到返回结果,应用需要在 Activity 和 Fragment 中实现 onActivityResult() 方法,然后检查回调关联到哪一个 requestCode...但是这样的处理方式会让我们的代码变得非常复杂,并且也无法保证在 Activity 发送或接收数据时参数的类型安全。...您也可以在启动 Activity 的地方使用一个独立的类接收返回结果,这样依然能够保证类型安全。 如何使用 接下来我们通过一个打开文档的示例,来演示如何使用 ActivityResult API。..." // 在 https://developer.android.google.cn/jetpack/androidx/releases/fragment 获得最新版本号 def fragment_version
领取专属 10元无门槛券
手把手带您无忧上云