`

ViewPager中如何获取Fragment

阅读更多

    在做项目时,遇到Fragment与Fragment、Fragment与Activity需要相互通信、传递数据以及进行互

 

操作的问题,查阅了官方文档,也实现了官方的例子,但实际项目是ViewPager+Fragment,按官方的例

 

子,总是获取不到Fragment的引用,如:

 

HeadLinesFragment headLinesFrag = (HeadLinesFragment)

        getSupportFragmentManager().findFragmentById(R.id.headline_fragment);

 

    这是因为在ViewPager里Fragment是new出来动态加到ViewPager里的,上需的Id只是Fragment的布

 

局文件的根Id,不是Fragment 的Id,故获取的Fragment为空

 

查询相关资料后,终于找到如下解决方案:

 

    一般来讲,我们再使用viewpager的时候,是在代码中动态的添加fragment。此时,我们不能去指定

 

fragment的id,也不能指定他的tag,如果你一定要去指定tag,运行时会提示,tag已经被指定。那么,在动

 

态的添加了fragment之后,我们如何能获取到该fragment并修改其中的内容呢。两种方法:

 

第一种方法实际上是一种hack方法,并没有官方文档说明支持。代码如下:

SomeFragment someFragment  = getSupportFragmentManager().FindFragmentByTag(“android:switcher:” + R.id.viewpager + “:0″);

if (someFragment != null) //可能没有实例化

{

if (someFragment.getView() != null)

{

someFragment.updateView();//自定义方法更新

}

}

    这里要记住的就是”android:switcher:” + R.id.viewpager + “:0″ 这个字符窜表示的就是该

 

fragment的tag,其中0 是fragment 在viewpager中的位置。

 

    第二种方法更正规,因为第一种方法对基于FragmentPagerAdapter的实现是有效的,但对于

 

FragmentStatePagerAdapter就无效了。因为FragmentStatePagerAdapter不会对传给

 

FragmentManager的Fragment设置tag.

ViewPager pager = (ViewPager)findViewById(R.id.viewpager);

FragmentStatePagerAdapter f = pager.getAdapter();

SomeFragment someFragment = (SomeFragment)f.instantiateItem(pager,position);

    instantiateItem(pager,position)方法会返回在position位置的fragment的引用。如果该

 

fragment 已经实例化了,再次调用instantiateItem(pager,position)的时候,该方法并不会调用

 

getItem()来再次实例化fragment,而是直接返回引用。

 

    方法三更简单:

 

    Activity里的语句:

 mPagerAdapter = new DownloadSlidePagerAdapter(getSupportFragmentManager());

 LocalVideoListFragment fragment =                ((LocalVideoListFragment)mPagerAdapter.getItem(mCurrItem));

 

 fragment.refresh();

 

    DownloadSlidePagerAdapter:

 public class DownloadSlidePagerAdapter extends FragmentPagerAdapter {

 

Fragment[] fragments = {new DownloadListFragment(),new      LocalVideoListFragment()};

 

    public DownloadSlidePagerAdapter(FragmentManager fm) {

         super(fm);

    }

 

    @Override

    public Fragment getItem(int position) {

          return fragments[position];

    }

 

    @Override

     public int getCount() {

          return fragments.length;

     }

    }

 

   直接获取new的实例对象应用

 

 

分享到:
评论

相关推荐

    Android中ViewPager获取当前显示的Fragment

    下面就给大家介绍下Android中ViewPager获取当前显示的Fragment的方法,一起看看吧。 一、使用 getSupportFragmentManager().findFragmentByTag()方法 Viewpager + FragmentPagerAdapter 情况下 才好使; ...

    fragment嵌套viewPager中放fragment

    fragment嵌套viewPager,viewpager中也是fragment切换。

    fragment+viewpager实现不同fragment之间的通信

    2. 使用EventBus:在每个Fragment中注册和取消注册EventBus,通过发送特定的事件来实现通信。这种方式避免了Activity的过度介入,使得Fragment间的通信更加解耦。 在实际项目中,为了使代码更易于管理和维护,建议...

    viewpager+fragment左右滑动实现动态加载数据。动态刷新fragment

    为了实现动态加载数据,你可以在`Fragment`的`onResume()`或`onStart()`方法中调用一个异步任务(如`AsyncTask`)来获取网络或本地的数据。数据加载完成后,你可以使用`LayoutInflater`和`ViewGroup`来更新UI,将新...

    根据数据动态添加ViewPager页数(Fragment)

    标题“根据数据动态添加ViewPager页数(Fragment)”揭示了我们需要讨论的是如何根据数据量动态地管理ViewPager中的页面数量,并使用Fragment作为每个页面的载体。这是因为Fragment提供了更好的模块化和可复用性,...

    Android App在ViewPager中使用Fragment的实例讲解

    在这个实例中,我们将深入理解如何在ViewPager中使用Fragment来构建滑动页面。 首先,为什么要在ViewPager中使用Fragment?Fragment是Android系统中的一种模块化组件,它可以在一个Activity中包含多个,每个...

    Fragment 结合viewpager使用 和Fragment 多次套用

    在Android开发中,`Fragment`和`ViewPager`是两个非常重要的组件,它们广泛用于构建复杂的用户界面,尤其是在处理平板电脑和大屏幕设备时。`Fragment`代表应用中的一个可重用部分,而`ViewPager`则允许用户水平滑动...

    ViewPager实现循环滚动切换Fragment

    在Android开发中,ViewPager是一个非常常用的组件,它用于展示可滑动的页面,通常与Fragment搭配使用,以实现丰富的交互式界面。在这个场景下,"ViewPager实现循环滚动切换Fragment"是一个常见的需求,尤其是在轮播...

    ViewPager+Fragment基本使用

    在Android开发中,ViewPager和Fragment是两个非常重要的组件,它们能帮助我们构建出动态、交互性强的用户界面。ViewPager主要用于实现页面滑动效果,而Fragment则可以看作是Activity的一个模块化部分,允许我们在一...

    viewpager+fragment循环滑动

    在Android开发中,`ViewPager`和`Fragment`的结合使用是一种常见的实现页面滑动切换的手段,尤其适用于展示多个相似内容的场景,如轮播图、应用的引导页等。`ViewPager`允许用户左右滑动来浏览不同的`Fragment`,而`...

    Activity中的按钮去控制ViewPager与Fragment结合后,Fragment在ViewPager中的动态增加删除现实

    在Android开发中,`ViewPager`和`Fragment`的结合使用是一种常见的实现页面滑动切换的手段,尤其在创建多页布局时。`ViewPager`能够帮助我们实现流畅的左右滑动效果,而`Fragment`则可以承载不同的内容视图。本教程...

    viewpager+fragment+fragment间通讯

    3. 在`Fragment`的`onCreateView()`或`onActivityCreated()`中,通过`getArguments()`方法获取数据。 总结来说,实现"viewpager+fragment+fragment间通讯"涉及到`ViewPager`的使用、`Fragment`之间的数据传递以及`...

    Android ViewPager和Fragment 实现滑动切换页面

    在Android应用开发中,`ViewPager`和`Fragment`是两个重要的组件,它们常被结合使用以实现用户界面的滑动切换效果。`ViewPager`提供了一个可以左右滑动查看多个页面的容器,而`Fragment`则作为Activity的部分内容,...

    android ViewPager嵌套Fragment动态删除和插入案例

    android ViewPagerr嵌套Fragment 动态删除 动态插入,完美实现动态删除和插入,Fragment懒加载,可适用于各版本。the sample of android viewpager daynmic update or delete

    viewpager+fragment 动态更新数据

    在Android开发中,`ViewPager`和`Fragment`的结合使用是一种常见的实现页面滑动切换的方案。`ViewPager`允许用户左右滑动查看多个`Fragment`,每个`Fragment`通常代表一个独立的页面。动态更新数据是指在应用运行时...

    ViewPager中加入fragment,处理多 Fragment 页面的横向滑动

    2、本类中的activity中加入了一个fragment,然后在fragment中添加了ViewPager实现多个fragment的切换 3、注意:如果用的adapter是FragmentPagerAdapter,在运行效果中点击左侧的C时,第一次点击后,右侧是正常显示的...

    ViewPager+Fragment实现自动循环滚动

    在`ViewPager`的适配器中(通常是`FragmentPagerAdapter`或`FragmentStatePagerAdapter`),我们需要覆盖`instantiateItem()`和`destroyItem()`方法,以便正确处理这些额外的首尾`Fragment`。同时,我们还需要确保在...

    viewpager+fragment无限滑动+传值给fragment

    在`Fragment`的`onCreate()`或`onCreateView()`方法中,通过`getArguments()`来获取传递的数据。 4. **Fragment的生命周期** 在处理`Fragment`时,了解其生命周期至关重要。`Fragment`有自己的`onCreate()`, `...

    ViewPager+Fragment_Demo

    这可以通过监听数据变化、使用LiveData或者在Fragment中实现Observer模式来实现。确保数据和视图的一致性是保证应用功能完整性的必要步骤。 7. **界面交互**:在`ViewPager+Fragment_Demo`中,用户可以通过滑动或者...

    顶部导航+viewpager+fragment多页面取消预加载

    在Android开发中,`ViewPager`是一个非常常用的组件,它用于展示多个`Fragment`或`View`,并可以平滑地左右滑动切换页面。`ViewPager`的一个特性是默认会预先加载相邻的页面,以实现流畅的过渡效果。然而,在某些...

Global site tag (gtag.js) - Google Analytics