viewpager

Android:ViewPager适配器PagerAdapter的使用

时间秒杀一切 提交于 2019-12-22 14:20:36
本文转载自: https://www.cnblogs.com/tinyphp/p/3891850.html 作者:tinyphp 转载请注明该声明。 PageAdapter是一个抽象类,直接继承于Object,导入包android.support.v4.view. PagerAdapter 即可使用。 要使用PagerAdapter, 首先要继承PagerAdapter类,至少覆盖以下方法: 在每次创建ViewPager或滑动过程中,以下四个方法都会被调用,而instantiateItem和destroyItem中的方法要自己去实现。 public abstract int getCount(); 这个方法,是获取当前窗体界面数 public abstract boolean isViewFromObject(android.view.View arg0, java.lang.Object arg1); 这个方法用于判断是否由对象生成界面 public java.lang.Object instantiateItem(android.view.View container, int position); 这个方法,return一个对象,这个对象表明了PagerAdapter适配器选择哪个对象放在当前的ViewPager中 public void destroyItem

APP可视化埋点原理大揭秘

二次信任 提交于 2019-12-22 01:37:29
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、背景 运营者能够对用户行为进行分析的前提,是对大量数据的掌握。在以往,这个数据通常是由开发者在控件点击、页面等事件中,一行行地编写埋点代码来完成数据收集的。然而传统的操作模式每当升级改版时,开发和测试人员就需要重复不断对代码进行更新,整个流程耗时长,无法满足业务的需求。 为帮助开发者解决这一痛点,个推应用统计“个数”推出“可视化埋点”这一技术来更高效地实现这个这一过程。“个数”的可视化埋点灵活、方便,开发者不需对数据追踪点添加任何代码,只需要连接管理台并圈选页面中需要埋点的元素,即可添加随时生效的界面追踪点。 本文将结合个数实践经验,对可视化埋点中的两大关键技术点即控件唯一标识和事件采集进行分析并提供解决方案。 二、可视化埋点关键技术点 可视化埋点的难点,或者说核心就是如何在开发者不编写任何代码的情况下,SDK 如何确定任意一个控件在该应用内的唯一性,以及如何监听控件的点击和页面的切换。 标识 为了防止不同页面中的控件标识重复出现,控件的唯一标识一般由页面标识加上控件标识生成。 页面标识生成 页面标识可以直接使用页面的名称,即 Activity name。其获取方式比较多,这里介绍一种比较通用的方法,即通过注册 Application.ActivityLifecycleCallbacks

ViewPager+Fragment动态刷新问题

血红的双手。 提交于 2019-12-20 12:55:32
在我们的项目开发中会经常使用到ViewPager+Fragment来实现特定的UI效果,但是当Fragment需要动态增加,删除过内容变更时,会出现Fragment页面刷新失效的情况 如下: @BindView(R.id.viewpager) ViewPager viewpager; List<MyFragment> fragments = new ArrayList<>(); private void setupViewPager(List<String> list_key) { fragments.clear(); for (int i = 0; i < list_key.size(); i++) { fragments.add(MyFragment.newInstance(list_key.get(i))); } viewpager.setAdapter(new MyPagerAdapter(getChildFragmentManager(), fragments)); viewpager.setOffscreenPageLimit(2); } class MyPagerAdapter extends FragmentPagerAdapter { private List<MyFragment> fragments; public MyPagerAdapter

安卓viewpager2通过fragment和tablayout使用

孤街醉人 提交于 2019-12-20 04:12:22
1,定义三个fragment页面 2,页面布局如下 3,在父页面中添加如下代码: //给viewpager建立适配器 viewPager.setAdapter(new FragmentStateAdapter(this) { @NonNull @Override public Fragment createFragment(int position) { switch (position) { case 0: return new Fragment(R.layout.fragment_rotate); case 1: return new Fragment(R.layout.fragment_scale); default: return new Fragment(R.layout.fragment_translate); } } @Override public int getItemCount() { return 3; } }); //tab与下面的viewpager对应 TabLayoutMediator tabLayoutMediator = new TabLayoutMediator(tabLayout,viewPager, new TabLayoutMediator.TabConfigurationStrategy() { @Override public void

[Android Pro] AndroidX了解一下

瘦欲@ 提交于 2019-12-20 03:53:14
cp : https://blog.csdn.net/qq_17766199/article/details/81433706 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

学不动也要学!深入了解ViewPager2

邮差的信 提交于 2019-12-15 22:28:21
就在上个月20号(2019年11月20号),期待已久的ViewPager2 正式版终于发布了!不知道你是否已经蠢蠢欲动着手用ViewPager2去改造你项目的ViewPager了?什么?你还不知道ViewPager2?那么请你马上系好安全带,本篇文章将带你一览ViewPager2的风采。 一、ViewPager2的新特性 ViewPager2从名字就可以看出来它是ViewPager的升级版,既然是升级版那么它相比ViewPager有哪些新功能和哪些API变化呢?我们接着往下看。 1.ViewPager2新特性 基于RecyclerView实现。这意味着RecyclerView的优点将会被ViewPager2所继承。 支持竖直滑动。只需要一个参数就可以改变滑动方向。 支持关闭用户输入。通过setUserInputEnabled来设置是否禁止用户滑动页面。 支持通过编程方式滚动。通过fakeDragBy(offsetPx)代码模拟用户滑动页面。 CompositePageTransformer 支持同时添加多个PageTransformer。 支持DiffUtil ,可以添加数据集合改变的item动画。 支持RTL (right-to-left)布局。我觉得这个功能对国内开发者来说可能用处不大… 2.相比ViewPager变化的API

超好用指示器框架 MagicIndicator 单独使用 (不跟ViewPager 相结合使用)。

丶灬走出姿态 提交于 2019-12-14 12:15:21
序 今天周二 ,早上在地铁的时候听见好几个小伙伴说 " 今天起晚了 、赶紧走快迟到了 、这个点人怎么这么多呢 ?" 。 最近在做一个功能 ,轮次跟下方的直播列表功能不进行联动 。 方案一 : 可以用 RecyclerView 实现这个效果 ,但是在点击的时候需要自己去定位 。 方案二 :因为项目中使用的是统一的 MagicIndicator ,所以采用单独使用 MagicIndicator 并且不跟 ViewPager 相关联 。 过程 首先回想一下使用 MagicIndicator + ViewPager 的代码 ,重点是最后一行代码 。 ViewPagerHelper.bind(magicIndicator, mViewPager); 第一次我是把这行代码给注释了 ,结果 Magicindicator 不能滑动也不能实现选中效果 ,只剩下 ViewPager 在滑动 。 看一下 bind 这个函数做了什么操作 。 /** * 简化和ViewPager绑定 * Created by hackware on 2016/8/17. */ public class ViewPagerHelper { public static void bind(final MagicIndicator magicIndicator, ViewPager viewPager) { viewPager

ViewPager新总结整理使用

感情迁移 提交于 2019-12-14 01:42:22
一、ViewPager 简介 ViewPager 是 android 扩展包 v4 包中的类,这个类可以让用户左右切换当前的 view ViewPager 直接继承了 ViewGroup,所有它是一个容器类,可以在其中添加其他的 view 类。 ViewPager 需要一个 PagerAdapter 适配器类给它提供数据。 ViewPager 经常和 Fragment 一起使用,并且提供了专门的 FragmentPagerAdapter 和 FragmentStatePagerAdapter 类供 Fragment 中的 ViewPager 使用。 二、ViewPager 的使用 创建PagerActivity 类 public class PagerActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_pager); } 2.在 PagerActivity 类中关联使用 ViewPager 及其 Adapter ViewPager 某种程度上与 RecyclerView 类似,都需要借助

追溯源码解决android疑难问题1--Viewpager之notifyDataSetChanged

折月煮酒 提交于 2019-12-10 15:57:56
最近项目结束,搞了一次代码分享。其中一位同学分享了一下自己在解决问题过程中的一些心得体会,感觉受益匪浅。整理出来,分享给大家。 建议使用自己编译的android os和虚拟机,这样就可以调试android系统中的任何组件。简单说来,深入android源码,去寻找解决问题的答。这事儿说起来简单,实际做起来还是有些难度的。我也曾经尝试着去看过,没看一会儿就晕了。 所以还是有针对性的去看源码,效率会高一些。 废话不多说,先看第一个示例。 Viewpager在调用notifyDataSetChanged()时,界面无刷新。 相信很多做过Viewpager的同学肯定遇到过这个问题,这个是bug还是android就是如此设计的,我们不做讨论。总之,它确实影响我们功能的实现了。 可能不少同学选择为Viewpager重新设置一遍适配器adapter,达到刷新的目的。但是这种方法在大多数情况下,是有问题的。 追踪源代码: 为什么调用数据更新的方法,Viewpager却没有更新呢,我们跟进该方法的源代码看一下。 首先查看适配器调用的super.notifyDataSetChanged(),该方法调到抽象基类PagerAdapter.notifyDataSetChanged()中: [java] view plain copy /** * This method should be called by