在做项目时,遇到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的方法,一起看看吧。 一、使用 getSupportFragmentManager().findFragmentByTag()方法 Viewpager + FragmentPagerAdapter 情况下 才好使; ...
fragment嵌套viewPager,viewpager中也是fragment切换。
2. 使用EventBus:在每个Fragment中注册和取消注册EventBus,通过发送特定的事件来实现通信。这种方式避免了Activity的过度介入,使得Fragment间的通信更加解耦。 在实际项目中,为了使代码更易于管理和维护,建议...
为了实现动态加载数据,你可以在`Fragment`的`onResume()`或`onStart()`方法中调用一个异步任务(如`AsyncTask`)来获取网络或本地的数据。数据加载完成后,你可以使用`LayoutInflater`和`ViewGroup`来更新UI,将新...
标题“根据数据动态添加ViewPager页数(Fragment)”揭示了我们需要讨论的是如何根据数据量动态地管理ViewPager中的页面数量,并使用Fragment作为每个页面的载体。这是因为Fragment提供了更好的模块化和可复用性,...
在这个实例中,我们将深入理解如何在ViewPager中使用Fragment来构建滑动页面。 首先,为什么要在ViewPager中使用Fragment?Fragment是Android系统中的一种模块化组件,它可以在一个Activity中包含多个,每个...
在Android开发中,`Fragment`和`ViewPager`是两个非常重要的组件,它们广泛用于构建复杂的用户界面,尤其是在处理平板电脑和大屏幕设备时。`Fragment`代表应用中的一个可重用部分,而`ViewPager`则允许用户水平滑动...
在Android开发中,ViewPager是一个非常常用的组件,它用于展示可滑动的页面,通常与Fragment搭配使用,以实现丰富的交互式界面。在这个场景下,"ViewPager实现循环滚动切换Fragment"是一个常见的需求,尤其是在轮播...
在Android开发中,ViewPager和Fragment是两个非常重要的组件,它们能帮助我们构建出动态、交互性强的用户界面。ViewPager主要用于实现页面滑动效果,而Fragment则可以看作是Activity的一个模块化部分,允许我们在一...
在Android开发中,`ViewPager`和`Fragment`的结合使用是一种常见的实现页面滑动切换的手段,尤其适用于展示多个相似内容的场景,如轮播图、应用的引导页等。`ViewPager`允许用户左右滑动来浏览不同的`Fragment`,而`...
在Android开发中,`ViewPager`和`Fragment`的结合使用是一种常见的实现页面滑动切换的手段,尤其在创建多页布局时。`ViewPager`能够帮助我们实现流畅的左右滑动效果,而`Fragment`则可以承载不同的内容视图。本教程...
3. 在`Fragment`的`onCreateView()`或`onActivityCreated()`中,通过`getArguments()`方法获取数据。 总结来说,实现"viewpager+fragment+fragment间通讯"涉及到`ViewPager`的使用、`Fragment`之间的数据传递以及`...
在Android应用开发中,`ViewPager`和`Fragment`是两个重要的组件,它们常被结合使用以实现用户界面的滑动切换效果。`ViewPager`提供了一个可以左右滑动查看多个页面的容器,而`Fragment`则作为Activity的部分内容,...
android ViewPagerr嵌套Fragment 动态删除 动态插入,完美实现动态删除和插入,Fragment懒加载,可适用于各版本。the sample of android viewpager daynmic update or delete
在Android开发中,`ViewPager`和`Fragment`的结合使用是一种常见的实现页面滑动切换的方案。`ViewPager`允许用户左右滑动查看多个`Fragment`,每个`Fragment`通常代表一个独立的页面。动态更新数据是指在应用运行时...
2、本类中的activity中加入了一个fragment,然后在fragment中添加了ViewPager实现多个fragment的切换 3、注意:如果用的adapter是FragmentPagerAdapter,在运行效果中点击左侧的C时,第一次点击后,右侧是正常显示的...
在`ViewPager`的适配器中(通常是`FragmentPagerAdapter`或`FragmentStatePagerAdapter`),我们需要覆盖`instantiateItem()`和`destroyItem()`方法,以便正确处理这些额外的首尾`Fragment`。同时,我们还需要确保在...
在`Fragment`的`onCreate()`或`onCreateView()`方法中,通过`getArguments()`来获取传递的数据。 4. **Fragment的生命周期** 在处理`Fragment`时,了解其生命周期至关重要。`Fragment`有自己的`onCreate()`, `...
这可以通过监听数据变化、使用LiveData或者在Fragment中实现Observer模式来实现。确保数据和视图的一致性是保证应用功能完整性的必要步骤。 7. **界面交互**:在`ViewPager+Fragment_Demo`中,用户可以通过滑动或者...
在Android开发中,`ViewPager`是一个非常常用的组件,它用于展示多个`Fragment`或`View`,并可以平滑地左右滑动切换页面。`ViewPager`的一个特性是默认会预先加载相邻的页面,以实现流畅的过渡效果。然而,在某些...