viewpager

RecyclerView和ViewPager内存管理的区别

匿名 (未验证) 提交于 2019-12-03 00:22:01
之所以想到写本文,是因为看到鸿洋微博的RecyclerView实现抖音效果的文章。里面讲了ViewPager实现会OOM,RecyclerView不会。 第一个get的点,RecyclerView打造成ViewPager,这个就不用多说了,SnapHelper封装了这一切 第二个get的点,为什么RecyclerView不会OOM呢? 这需要掌握RecyclerView一些浅显的原理。RecyclerView除了界面上显示的item,还有上下各2个供4个的预加载item。所以他内存中有 当前界面可见item数量+4 个数的item。他会在滑动的时候,不断bind新的数据。 ViewPager则是需要给他View的集合,你如果有10000个item,那内存中就必须有10000个item。 曾经我懵懂的时候问过Android老师,怎么才能只使用3个item去实现ViewPager? 这个问题挺白痴的,因为很简单就能实现。但是没想到老师说的答案令我震惊了,你没必要这么搞,他会自动替你管理,你移动到哪里就会有对应的item的销毁和创建。我说,假如我要写一个电子书,他有10000页,我肯定不能让他有10000页在内存中的对吗。他说,现在手机硬件都很好了,你做的这点优化微不足道。。。 这里就不写后续剧情了。我们固然可以用少量的item去实现ViewPager

NestedScrollView 嵌套ViewPageer,ViewPager中嵌套多个带RecyclerView的自定义view滑动时的问题解决

匿名 (未验证) 提交于 2019-12-02 23:49:02
遇到的问题描述: 嵌套后ViewPager中的view展示不出来,解决办法:重新设置Viewpager的高度 自定义viewpager public class WrapViewPager extends ViewPager { private int current; private int height = 0; /** * 保存position与对于的View */ private HashMap<Integer, View> childrenViews = new LinkedHashMap(); private boolean isCanScroll = false; public WrapViewPager(Context context) { super(context, null); } public WrapViewPager(Context context, AttributeSet attrs) { super(context, attrs); } public void setScanScroll(boolean isCanScroll) { this.isCanScroll = isCanScroll; }//切换tab的时候重新设置viewpager的高度 public void resetHeight(int current) { this

1704B第7天ViewPagerViewPager+Fragment+TabLayout新闻头部标题导航(*****)

匿名 (未验证) 提交于 2019-12-02 23:42:01
第7天ViewPagerViewPager+Fragment+TabLayout新闻头部标题导航(*****) ViewPager 一.效果 二.思路:1个ViewPager+5个Fragment+1个FragmentPagerAdapter+TabLayout 三.代码 ViewPager 一.效果 二.思路:1个ViewPager+5个Fragment+1个FragmentPagerAdapter+TabLayout 1.容器:ViewPager 2.数据:ArrayList<Fragment ArrayList<String 标题 3.适配器:FragmentViewPager 4.TabLayout:需要导入依赖 重写的方法: (1)getCount():返回数据源的总数量 (2)getItem(): (3)getPageTitle():返回标题 三.代码 (1)导入依赖:implementation 'com.android.support:design:27.0.0’或者 implementation ‘com.android.support:design:28.0.0’ (2)布局activity_main.xml:ViewPager+TabLayout < ? xml version = "1.0" encoding = "utf-8" ? > <

ViewPager+Fragment解决懒加载多次请求数据问题以及Fragment渲染完毕后在请求的方案

匿名 (未验证) 提交于 2019-12-02 23:40:02
解决问题: 1.ViewPager的懒加载模式为了让切换更加流畅,但是会多预加载的Fragment需要的数据进行网络请求,当多个Fragment都存在大量数据的时候,容易因为队列中请求较多导致卡顿,也浪费流量。 2.频繁切换ViewPager造成过多的网络请求。 3.在UI还没有渲染完成的时候请求数据,导致空指针异常。 解决方案:抽象基类的创建 public abstract class BasePageFragment extends Fragment { protected boolean isViewInitiated; protected boolean isVisibleToUser; protected boolean isDataInitiated; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); isViewInitiated = true; prepareFetchData(); }

[Android] Android 类似今日头条顶部的TabLayout 滑动标签栏 效果

匿名 (未验证) 提交于 2019-12-02 23:26:52
APP市场中大多数新闻App都有导航菜单,导航菜单是一组标签的集合,在新闻客户端中,每个标签标示一个新闻类别,对应下面ViewPager控件的一个分页面,今日头条, 网易新闻等。 先演示下效果: 话不多说,直接开撸: 一、添加依赖 compile 'com.android.support:appcompat-v7:23.4.0' compile 'com.android.support:design:23.4.0' compile 'com.android.support:recyclerview-v7:23.4.0' compile 'com.android.support:cardview-v7:23.4.0' 二、在布局文件中加入Layout activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"

Android开发:TabLayout+Fragment+ViewPager实现总结

匿名 (未验证) 提交于 2019-12-02 22:56:40
之前想实现一下就觉得这里面的关系好复杂,实现之后又理了理关系就觉得不是那么麻烦了…技术这个东西就是会者不难难者不会吧,为了把关系理的更透彻一些,就写这么一篇博客吧,用最简单的实现方式来实现这个东西,然后很感谢 https://blog.csdn.net/wuyinlei/article/details/50571500 这篇博客,虽然有一些地方有错误,但类和界面展示的顺序很舒服,能顺着一步步理到最后。 compile 'com.android.support:design:26.+' 这里根据每个人的依赖关系,后面的版本应该是不一样的,如果写的不对会直接报错。 我不太清楚最新版本是什么,为了图省事就暂时这么写了,按照AS给的提示这样写是不推荐的… 需要三个以上的layout,其中一个是主界面用于加载“容器”(我自己起的名,Android素养不够..好多技术说不出实际的名字),一个用于做fragment的容器,并”被主界面加载”,剩下的为fragment容器装载用到的界面,相当于一个个tab页的内容 layout_tabs.xml <?xml version="1.0" encoding="utf-8"?> < LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" android

Android Scroller完全解析,关于Scroller你所需知道的一切

好久不见. 提交于 2019-12-02 17:44:50
转载请注明出处: http://blog.csdn.net/guolin_blog/article/details/48719871 2016大家新年好!这是今年的第一篇文章,那么应CSDN工作人员的建议,为了能给大家带来更好的阅读体验,我也是将博客换成了宽屏版。另外,作为一个对新鲜事物从来后知后觉的人,我终于也在新的一年里改用MarkDown编辑器来写博客了,希望大家在我的博客里也能体验到新年新的气象。 我写博客的题材很多时候取决于平时大家问的问题,最近一段时间有不少朋友都问到ViewPager是怎么实现的。那ViewPager相信每个人都再熟悉不过了,因此它实在是太常用了,我们可以借助ViewPager来轻松完成页面之间的滑动切换效果,但是如果问到它是如何实现的话,我感觉大部分人还是比较陌生的, 为此我也是做了一番功课。其实说到ViewPager最基本的实现原理主要就是两部分内容,一个是事件分发,一个是Scroller,那么对于事件分发,其实我在很早之前就已经写过了相关的内容,感兴趣的朋友可以去阅读 Android事件分发机制完全解析,带你从源码的角度彻底理解 ,但是对于Scroller我还从来没有讲过,因此本篇文章我们就先来学习一下Scroller的用法,并结合事件分发和Scroller来实现一个简易版的ViewPager。 Scroller是一个专门用于处理滚动效果的工具类

浅谈androidx

℡╲_俬逩灬. 提交于 2019-12-02 17:43:22
一次实验的经历 一次实验时,为了实现使用WebView来加载URL,并且需要在跳转之后,出现选择项,选择自定义的MyBrowser进行浏览,于是编写了如下代码: public class MainActivity extends AppCompatActivity { private String urlHead = "https://" ; @Override protected void onCreate ( Bundle savedInstanceState ) { super . onCreate ( savedInstanceState ) ; setContentView ( R . layout . activity_main ) ; Button button1 = ( Button ) findViewById ( R . id . button ) ; button1 . setOnClickListener ( new View . OnClickListener ( ) { @Override public void onClick ( View v ) { EditText edit1 = ( EditText ) findViewById ( R . id . editText ) ; String url = edit1 . getText ( ) .

AndroidX了解一下

十年热恋 提交于 2019-12-02 17:42:19
推荐阅读: Android 开发高手课 温故知新篇 1.说明 官方原文如下 : We hope the division between android.* and androidx.* makes it more obvious which APIs are bundled with the platform, and which are static libraries for app developers that work across different versions of Android. 简单地说就是新的库可以在不同的Android版本上使用。比如之前我们如果使用 support 为27.1.1的相关依赖库时。可能需要所有相关的 support 库都为27.1.1。如果其中有bug的话,可能需要所有的都去升级,存在一个绑定关系,而且正式版的发布周期也很长。 通过AndroidX,我们可以看到实时实现的特性和bug修复。升级个别依赖,不需要对使用的所有其他库进行更新。这就和我们使用Github上的开源库一样的,出了问题,我们可以提出bug和意见。作者修复后,发布新版本,我们就可以直接替换使用了。更加的透明便捷。 2.变化 我选取了几个常用依赖库,我们可以看看变化: Old build artifact AndroidX build artifact com

Android之Fragment中使用startActivityForResult

▼魔方 西西 提交于 2019-12-02 14:29:16
大家或许有遇到这个神坑,在Fragment中使用startActivityForResult能够成功,可是在Fragment中的onActivityResult却无法被调用。一不注意就让人一夜愁白了头。苦经探索(当然包括亲爱的百度和谷歌),终于总结出了一些规律。 在Fragment中使用startActivityForResult之后,onActivityResult的调用是从activity中开始的(即会先调用activity中的onActivityResult)。 一.只嵌套了一层Fragment(比如activity中使用了viewPager,viewPager中添加了几个Fragment) 在这种情况下要注意几个点: 1.在Fragment中使用startActivityForResult的时候,不要使用getActivity().startActivityForResult,而是应该直接使startActivityForResult()。 2.如果activity中重写了onActivityResult,那么activity中的onActivityResult一定要加上super.onActivityResult(requestCode, resultCode, data)。 如果违反了上面两种情况,那么onActivityResult只能够传递到activity中的