private class ViewPagerAdapter extends FragmentPagerAdapter {

     FragmentManager mFragmentManager;

     FragmentTransaction mCurTransaction;

        public ViewPagerAdapter(FragmentManager fragmentManager) {

         super(fragmentManager);

         this.mFragmentManager = fragmentManager;

        }





        @Override

        public Fragment getItem(int position) {

         final String mimeType = mSortedActionMimeTypes.get(position);

         Log.d("lyl", "getItem-->mimeType: " + mimeType + " position: " + position);

            QuickContactListFragment fragment = new QuickContactListFragment(mimeType);

            return fragment;

        }

        

        @Override

        public Object instantiateItem(ViewGroup container, int position) {

         removeFragment(container,position);

        

         QuickContactListFragment fragment =

         (QuickContactListFragment) super.instantiateItem(container,position);

         final String mimeType = mSortedActionMimeTypes.get(position);

            final List<Action> actions = mActions.get(mimeType);

            Log.d("lyl", "instantiateItem-->mimeType: " + mimeType + " position: " + position

             + " container.id: " + container.getId());

            Log.d("lyl", "actions: " + actions);

            fragment.setActions(actions);

         return fragment;

        }

        

        private void removeFragment(ViewGroup container, int position){

         if (mCurTransaction == null) {

mCurTransaction = mFragmentManager.beginTransaction();

}

         String name = getFragmentName(container.getId(), position);

         Fragment fragment = mFragmentManager.findFragmentByTag(name);

         mCurTransaction.remove(fragment);

         mCurTransaction.commit();

         mCurTransaction = null;

         mFragmentManager.executePendingTransactions();

        }

        

    private String getFragmentName(int viewId, int index) {

     return "android:switcher:" + viewId + ":" + index;

    }

        

        @Override

        public int getCount() {

            return mSortedActionMimeTypes.size();

        }





        @Override

        public int getItemPosition(Object object) {

            final QuickContactListFragment fragment = (QuickContactListFragment) object;

            final String mimeType = fragment.getMimeType();

            for (int i = 0; i < mSortedActionMimeTypes.size(); i++) {

                if (mimeType.equals(mSortedActionMimeTypes.get(i))) {

                    return i;

                }

            }

            return PagerAdapter.POSITION_NONE;

        }

}

贴出源代码FragmentPagerAdapter中关于instantiateItem方法的机制

 @Override
     public Object instantiateItem(View container, int position) {
         if (mCurTransaction == null) {
             mCurTransaction = mFragmentManager.beginTransaction();
         }
         // Do we already have this fragment?
         String name = makeFragmentName(container.getId(), position);
         Fragment fragment = mFragmentManager.findFragmentByTag(name);
         if (fragment != null) {
             if (DEBUG) Log.v(TAG, "Attaching item #" + position + ": f=" + fragment){
             mCurTransaction.attach(fragment);
         } else {
             fragment = getItem(position);
             if (DEBUG) Log.v(TAG, "Adding item #" + position + ": f=" + fragment);
             mCurTransaction.add(container.getId(), fragment,
                     makeFragmentName(container.getId(), position));
         }
         if (fragment != mCurrentPrimaryItem) {
             fragment.setMenuVisibility(false);
         }
         return fragment;
     }

在继承fragmentpagerAdapter的类中。重载instantiateItem后,首先清除掉缓存内的fragment,这样保证了调用父类的instantiateItem后,会每次从geiItem()里获得最新的fragment.就攻克了使用的是缓存内的fragment,而数据却不是最新的问题。

调用 FragmentPagerAdapter.notifyDataSetChanged() 并不能更新其 Fragment之我的解决方法的更多相关文章

  1. 【转】为什么调用 FragmentPagerAdapter.notifyDataSetChanged() 并不能更新其 Fragment?

    为什么调用 FragmentPagerAdapter.notifyDataSetChanged() 并不能更新其 Fragment? 转自:http://www.apkbus.com/android- ...

  2. 为什么调用 FragmentPagerAdapter.notifyDataSetChanged() 并不能更新其 Fragment?

    在一个 Android 应用中,我使用 FragmentPagerAdapter 来 处理多 Fragment 页面的横向滑动.不过我碰到了一个问题,即当 Fragment 对应的数据集发生改变时,我 ...

  3. 为什么调用 FragmentPagerAdapter.notifyDataSetChanged() 并不能更新其 Fragment?【转载】

    转载自:http://www.cnblogs.com/dancefire/archive/2013/01/02/why-notifyDataSetChanged-does-not-work.html ...

  4. 为什么调用 FragmentPagerAdapter.notifyDataSetChanged() 并不能更新其 Fragment

    http://stackoverflow.com/questions/10849552/update-viewpager-dynamically if you want to switch out t ...

  5. mssql sqlserver 表增加列后,视图不会自动更新相关列的两种解决方法分享

    摘要: 今天对物理数据表,进行增加列操作后,程序一直显示无法找到相应列,通过仔细比对发现,视图中无相应列更新,下文将具体的解决方法分享如下: 例: create view vw_test as sel ...

  6. Win8.1无法安装更新,提示0x800*****错误的解决方法

    Win8.1无法安装更新,提示0x800*****错误的解决方法   注:本教程同样适用于Win10系统 有时候Win8.1某个系统文件的损坏会导致无法安装Windows更新,表现为Windows更新 ...

  7. 记前些日子archlinux更新后无法调节声音的解决方法

    桌面环境用的是xfce4. 自从某次更新过后,panel中调节声音的插件变成了 xfce4-pulseaudio-plugin.然后就发现在panel中无法调节声音了. 在这个插件的属性中发现了一项设 ...

  8. 【我的Android进阶之旅】Android调用JNI出错 java.lang.UnsatisfiedLinkError: No implementation found for的解决方法

    错误描述 今天使用第三方的so库时候,调用JNI方法时出现了错误.报错如下所示: 11-01 16:39:20.979 4669-4669/com.netease.xtc.cloudmusic E/a ...

  9. Win10更新后蓝牙出现故障的解决方法

    昨天Win10自动更新后,我发现我的键盘突然就不管用了,检查了一下发现原来蓝牙没有打开,同时任务栏中的蓝牙图标也不见了. 不久之前,这样的情况已经出现过了一次,那次好像更新系统后就好了,但这次是系统更 ...

随机推荐

  1. VC6中创建Qt工程的创建

    文章来源:http://blog.sina.com.cn/s/blog_64d015c10100sf1o.html 本文主要介绍怎么创建可以在VC6中编译的QT工程.本文所采用环境为VC++6.0+Q ...

  2. mysql merge table

    SELECT COUNT(*) FROM `comment` SHOW CREATE TABLE `comment` CREATE TABLE `comment1` ( `id` INT(8) NOT ...

  3. 「操作系统」:The most useful condition codes

    CF: Carry Flag.The most recent operation generated a carry out of the most significant bit. Used to ...

  4. centos安装vim7.4

    转载于:http://www.cnblogs.com/nhlinkin/p/3545509.html    系统版本centos6.4; root权限 su - root     卸载 $ rpm - ...

  5. UIAlertView、UIActionSheet兼容iOS8

    链接地址:http://blog.csdn.net/nextstudio/article/details/39959895?utm_source=tuicool 1.前言 iOS8新增了UIAlert ...

  6. ContentProvider中的数据库的生成时机以及ContentResolver的insert()方法总结

    经过几天的总结,以及结合一些代码的实际测试,终于算是明白了ContentProvider中的数据的生成时机了. 目录结构: MainActivity.java package com.wyl.cont ...

  7. 深入理解-HashMap

    一.HashMap概述 HashMap 在家族中位置:实现了Map接口,继承AbstractMap类.HashMap 允许key/value 都为null. 二.HashMap存储结构 HashMap ...

  8. USACO Arithmetic Progressions 【构造等差数列】

    USER: Jeremy Wu [wushuai2] TASK: ariprog LANG: C++ Compiling... Compile: OK Executing... Test 1: TES ...

  9. 基于springmvc的简单增删改查实现---中间使用到了bean validation

    package com.kite.controller; import java.util.HashMap; import java.util.Map; import javax.validation ...

  10. [置顶] 图书推荐:SQL Server 2012 T-SQL基础 Itzik Ben-Gan

    经过近三个月的不懈努力,终于翻译完毕了.图书虽然是基础知识,但是,即使你已经使用T-SQL几年,很多地方还是能够弥补你的知识空白.大师级的人物写基础知识,或许你想知道这基础中还有哪些深奥,敬请期待吧. ...