viewpager

FragmentPagerAdapter.notifyDataSetChanged()不能更新问题?

落花浮王杯 提交于 2019-12-05 23:33:04
在一个 Android 应用中,我使用 FragmentPagerAdapter 来处理多 Fragment 页面的横向滑动。不过我碰到了一个问题,即当 Fragment 对应的数据集发生改变时,我希望能够通过调用 mAdapter.notifyDataSetChanged() 来触发 Fragment 页面使用新的数据调整或重新生成其内容,可是当我调用 notifyDataSetChanged() 后,发现什么都没发生。 搜索之后发现不止我一个人碰到这个问题,大家给出的解决办法五花八门,有些确实解决了问题,但是我总感觉问题没搞清楚。于是我决定搞明白这个问题到底是怎么回事,以及正确的用法到底如何。要搞明白这个问题,仅仅阅读文档并不足够,还需要阅读相关几个类的相关方法的实现,搞懂其设计意图。下面就是通过阅读源代码搞明白的内容。 【ViewPager】 ViewPager 如其名所述,是负责翻页的一个 View。准确说是一个 ViewGroup ,包含多个 View 页,在手指横向滑动屏幕时,其负责对 View 进行切换。为了生成这些 View 页,需要提供一个 PagerAdapter 来进行和数据绑定以及生成最终的 View 页。 setAdapter() ViewPager 通过 setAdapter() 来建立与 PagerAdapter 的联系。这个联系是双向的,一方面

android ViewPager滑动事件讲解

陌路散爱 提交于 2019-12-05 18:22:47
android ViewPager滑动事件讲解 今天在做项目的时候,由于要处理viewPager页面滑动的事件,所以对其进行了一个小小的研究: 首先ViewPager在处理滑动事件的时候要用到OnPageChangeListener OnPageChangeListener这个接口需要实现三个方法:(onPageScrollStateChanged,onPageScrolled ,onPageSelected) onPageScrollStateChanged( int arg0) ,此方法是在状态改变的时候调用,其中arg0这个参数 有三种状态(0,1,2)。arg0 ==1的时辰默示正在滑动,arg0==2的时辰默示滑动完毕了,arg0==0的时辰默示什么都没做。 当页面开始滑动的时候,三种状态的变化顺序为(1,2,0),演示如下: 当viewPager状态改变时候的代码块: <IMG style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: medium none; BORDER-RIGHT: medium none" alt=http://img.my.csdn.net/uploads/201304/16/1366083605_9502.png src="http://img.my

Android ViewPager 取消预加载

强颜欢笑 提交于 2019-12-05 18:22:36
Android 新引入的Fragment加入了Viewpager这样的一个组件。至于该控件的功能在这里就不说了。这篇文章主要解决fragment viewpager预加载的问题。 默认的viewpager是会预先加载下一个fragment的控件的,可以通过setOffscreenPageLimit(int limit) 来设置要提前加载的fragment。即是说当limit等于5 的时候,打开第一个fragment的时候就相当于同时打开了其他的4个fragment了。这样切换的时候将会非常流畅。 但是,当每个fragment都需要去联网加载网络数据或者做一些耗时的操作,而且有其他的fragment并不是必须的,用户不一定会打开。这样的话如果还 预加载的话将会浪费资源,用户体验也不好。虽然可以通过setOffscreenPageLimit(0)来设置不提前预加载,但这样的设置没有效果。通过研究ViewPager的 源码,可以设置该类默认的DEFAULT_OFFSCREEN_PAGES = 0,来预防预加载。 下面是我整理的android-support-v4.jar,兼容了所有新版本和旧版本。 http://pan.baidu.com/s/1dDCEAlF 来源: oschina 链接: https://my.oschina.net/u/1265116/blog/209685

借助Handler,实现ViewPager中页面的自动切换

让人想犯罪 __ 提交于 2019-12-05 15:05:04
在很多电商网页及app上都有自动切换的商品的推广快,感觉体验挺不错的,正好今天学习使用ViewPager,因此也实现了一个功能类似的demo。 下面是其中的两个截图: 实现一个自动播放功能的ViewPager,要做的主要有以下的几个部分: 实现一个ViewPagerAdapter,用于为ViewPager提供展示内容(例如上面的两张小猫图片 ) public class ViewPagerAdapter extends PagerAdapter { private List<View> mData; public ViewPagerAdapter(List<View> mData) { this.mData = mData; } @Override public int getCount() { return mData.size(); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public Object instantiateItem(ViewGroup container, int position) { View v = mData.get(position); container.addView(v);

android: 结合BottomNavigationView、ViewPager和Fragment 实现左右滑动的效果

我与影子孤独终老i 提交于 2019-12-05 14:53:01
主界面:MainActivity package com.yongdaimi.android.androidapitest; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import com.yongdaimi.android.androidapitest.fragment.HomePageFragment; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initFragment(); } private void initFragment() { HomePageFragment homePageFragment = HomePageFragment.newInstance(); getSupportFragmentManager() .beginTransaction() .add(R.id.fl_main_container,

android打飞机游戏、MVP句子迷App、悬浮窗、RxJava+Retrofit、加载动画、定制计划App等源码

我的未来我决定 提交于 2019-12-05 02:54:24
Android精选源码 微信打飞机 android进度设置加载效果源码 Android新手引导库EasyGuide MVP-好看又好用的句子迷客户端 XFloatView 一个简易的悬浮窗实现方案 android高仿微信支付宝扫一扫的效果(弱光检测自动放大) Android一个用于制定各种计划的APP源码 android实现UC首页头部交互效果源码 基于OKHTTP的文件下载 Android RxJava+Retrofit各种实例源码 Android优质博客 移动导航设计,看这一篇就够了 平常我们去商场或者景点逛的时候,通常会看到整个景区或者整个商场的导游图,能让我们知道身处何地并且快速的找到目的地。投射到一个虚拟的产品上面,同样是一个“商场”或“景点”,为了让用户能够顺利的在产品中畅行,则必须为用户提供一个有效的导航系统,让用户时刻清楚自己在应用中所处的位置,及如何前往目的页面。产品的导航系统,是产品... 阅读原文 Android TabLayout使用详解 通常在ViewPager的上方,我们都会放一个标签指示器与ViewPager进行联动。以前,我们大多使用的是GitHub上的开源框架PagerSlidingTabTrip。而现在,我们可以使用Android自带的控件TabLayout来实现这个效果了,而且TabLayout更为强大,因为Tab标签可以使用自定义View..

FragmentPagerAdapter 页面类型、数量、内容更新问题

﹥>﹥吖頭↗ 提交于 2019-12-05 02:38:11
场景 存在一种需求,当用户系统中,属于某一组织的用户登录之后(或者账户切换),要求主页面显示不同的ViewPager + Fragment组合,并且要求app无需退出就能刷新组合以及组合中的页面。 此外,为了保证Fragment和Fragment中View不必要的inflate和渲染,要求尽可能重用已存在的Fragment和View。显然FragmentPagerAdapter是首选。但是存在三个问题: 1、FragmentPagerAdapter默认无法更新,需要重写getItemPosition,返回值为PagerAdapter.POSITION_NONE才可以更新 2、重用的Fragment设置参数无法重新初始化 3、重用的Fragment类型和新的Fragment类型存在不匹配问题,如旧的UserFragment页面,但是新的要求是ListFragment,所以类型存在问题。 解决方案 我们需要重写FragmentPagerAdapter,但问题是存在各种不方便的因素,因此,我们需要自定义FragmentPagerAdapter。 public abstract class CustomFragmentPagerAdapter extends PagerAdapter { private static final String TAG =

Viewpager 实现自动播放

北城余情 提交于 2019-12-04 18:27:46
代码如下 MainActivity.java package com.example.vp_demo2; import java.util.ArrayList; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; import com.example.vp_demo2.adapter.MyPagerAdapter; import com.example.vp_demo2.bean.News; public class MainActivity extends Activity { ArrayList<News> newsList = new ArrayList<News>(); private static final int

Fragment + ViewPager +TabLayout

独自空忆成欢 提交于 2019-12-04 18:27:30
1.添加依赖 com.android.support:design:25.3.1 2.XML布局文件 <android.support.design.widget.TabLayout android:id="@+id/TabLayout" android:layout_width="match_parent" android:layout_height="wrap_content" ></android.support.design.widget.TabLayout> <android.support.v4.view.ViewPager android:id="@+id/ViewPager" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/TabLayout"></android.support.v4.view.ViewPager> 3.代码实现 public class MainActivity extends AppCompatActivity { private TabLayout mTabLayout; private ArrayList<Fragment> mList = new ArrayList<>(); private

Android控件之Toolbar + DrawerLayout的使用

巧了我就是萌 提交于 2019-12-04 18:21:29
载请标明出处: http://blog.csdn.net/u011974987/article/details/50963495 ; 最近闲着没事儿,在关注一些遵循最新的Material Design设计规范的应用和效果,感觉很高大上;一直都没有去尝试过Material Design的一些新控件,很多还是不熟悉的,所以最近就写Demo 来熟悉下这些控件的使用,接下来使用官方支持库来快速实现这类效果,需要使用到Toolbar和DrawerLayout,如果你还不知道这两个Widget,先去google看下文档吧~,详细步骤如下: 1、首先需要添加appcompat-v7支持: 如果是在Android Studio 2.1 Preview3 上创建的项目,默认已经添加了appcompat-v7和design支持了,如果不是最新版AndroidStudio则需要在build.gradle中添加如下代码: dependencies { compile fileTree( dir : 'libs' , include: [ '*.jar' ]) compile 'com.android.support:appcompat-v7:23.2.0' compile 'com.android.support:design:23.2.0' } 然后同步一下Gradle去下载。 2