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中的跳转也记录在下面
当ViewPager切换到当前的Fragment时,Fragment会加载布局并显示内容,如果用户这时快速切换ViewPager,即Fragment需要加载UI内容,而又频繁地切换Fragment,就容易产生卡顿现象...风险:在Fragment比较多的情况下,部分低端机型容易产生OOM问题。...3.Fragment内容延迟加载 (1) 描述 在切换到当前Fragment的时候,并不立刻去加载Fragment的内容,而是先加载一个简单的空布局,然后启动一个延时任务,延时时长为T,当用户在该Fragment...停留时间超过T时,继续执行加载任务;而当用户切换到其他Fragment,停留时间低于T,则取消该延时任务。...这里我使用的做法是,给ViewPager增加一个OnPageChangeListener,,该监听器的onPageSelected(position)能监听ViewPager当前切换到哪个Fragment
这次带来的是新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中可以直接引用,这个是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 已经无效时
而且 Fragment 比较轻量,本身由 Activity 来管理(而不像 Activity 由 Android 系统服务管理),在不同的布局结构中重用 Fragment 可以优化屏幕空间和用户体验。...Android中Fragment都是由 FragmentManager 来管理的。...那么如何解决解决方案1中的问题。 问题5,多进程的 Activity 在切换标签后如何处理?Back 键如何处理?...1,实现的问题,使用多Task的实现方式,在Android中需要声明Activity的TaskAffinity,而 TaskAffinity 不能在代码中动态声明,而只能写在配置文件中,导致不同Tab打开的同一个...4,使用 LocalActivityManager,实现对每个 Tab 中 Fragments 的独立管理。
背景 在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
在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
由于 Window 的 decorView 默认是设置有 10dp 的padding。需要获取到decorView后设置其padding为(0, 0, 0, 0...
是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真正对用户可见时
作者 / 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
隐藏虚拟键盘 网上可以搜到各种方法,实际测试中,我的开发用机中,仅仅下面这个方法有效,记录一下。...imm.hideSoftInputFromWindow( v.getApplicationWindowToken( ) , 0 ); } } 在Activity...启动时,默认隐藏软键盘:** 在AndroidManifest.xml中找到你得Activity ,为它添加属性: android:windowSoftInputMode="stateAlwaysHidden..." 输入遮挡Edittext时的处理: 在AndroidManifest.xml中找到你得Activity ,为它添加属性: android:windowSoftInputMode="adjustPan
--请求访问使用照相设备--> 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
作者 / Yacine Rezgui 无论您是在应用中请求某项权限,从文件管理系统中选择某个文件,还是期望从第三方应用中获取到某些数据,都会涉及到在 Activity 之间传递数据,而这也正是 Android...之前,想要从启动的 Activity 中获取到返回结果,应用需要在 Activity 和 Fragment 中实现 onActivityResult() 方法,然后检查回调关联到哪一个 requestCode...但是这样的处理方式会让我们的代码变得非常复杂,并且也无法保证在 Activity 发送或接收数据时参数的类型安全。...您也可以在启动 Activity 的地方使用一个独立的类接收返回结果,这样依然能够保证类型安全。 如何使用 接下来我们通过一个打开文档的示例,来演示如何使用 ActivityResult API。...正如您看到的代码片段,ActivityResult 在处理来自 Activity 的返回数据时带来了更便捷的开发体验。
一、思考 当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,做接口隔离。
文章目录 一、如何解决 startActivityForResult 被弃用? 二、ActivityResultContract 该如何使用?...可以明显的看到,在androidx.activity1.2.0-alpha04时开始,Android中这位你调用过无数次的startActivityForResult和onActivityResult,...但倘若编写一个稍复杂的页面,需要同时请求相册、需要在其它Activity选择数据并回调、需要判断权限等等时,继续使用startActivityForResult,会导致onActivityResult里掺杂各种嵌套及判断...同时,引用一个官方文档的警告 ↓ 注意:虽然在 fragment 或 activity 创建完毕之前可安全地调用 registerForActivityResult(),但在 fragment 或 activity...如果有需要,我会再写一篇使用较少的在单独的类中接收 Activity 结果和Activity Result API的源码解析。技术有限,若文中有错误遗漏之处,尽情谅解,也欢迎指正共同进步。
领取专属 10元无门槛券
手把手带您无忧上云