解决RadioButton+FragmentPagerAdapter+Fragment切换页面数据加载的问题

我相信大家在网上已经看到很多介绍Activity与Fragment数据交互的问题。但大家都看到都是在Activity.onCreate方法中加载数据,这是初始时加载数据,我相信大家对这个一定很熟悉。我今天讲的这种是Fragment已经加载完后,然后再重新向Fragment内的控件加载数据。

1、先说说适用场合:

比如我想制作一个销售订单的图表,但通常客户要求的不只一个图表,可能会要求LineChart,BarChart,PieChart等等显示出来。如果我们每个图表都用一个Activity,系统显得很复杂,因此,大家会选择用类似TabActivity的方式。但发现TabHost通常情况是放在布局文件的根目录,让其与LinearLayout放在同一级的条件下,我试了N次,就是不行。不知道我是哪里出错,还是怎么的,放在同级条件下怎么都显示不出来。没办法,只能用RadioButton+FragmentPagerAdapter+Fragment的方式解决。

2、FragmentPagerAdapter加载Fragment问题

     通常情况下,如果多个Fragment同时放在一个Activity,我们可以通过findViewById(id)的方法找到对应的控件,然后赋值就可以更新Fragment内控件的内容。但如果是通过Adapter加载的多个Fragment,这种方法根本不灵。

     经过多次试验,FragmentPagerAdapter加载的Pager,通常只有两个有效,下面以三个Fragment为例:

     A:有三个Fragment1,Fragment2,Fragment3。Activity.onCreate启动时加载FragmentPagerAdapter进这三个Fragment,如果当前Page是Fragment1,那么只有Fragment1,Fragment2上的控件存在内存中,如果你取出第三个Fragment(Fragment3),然后读取其上的控件,那么出来的结果都是空,一定抛出异常。

     B:当前的Page是Fragment2时,那么只有Fragment2,Fragment3有效,Fragment1内的控件读出来也是空。

     C:当前的Page是Fragment3时,只有Fragment2,Fragment3有效,Fragment1内的控件读出来也是空。

结论:

        1)当前的页(按Fragment加入ArrayList的顺序)有效时,只有当前页和其后一页内的控件在内存中,其他的Fragment内的控件都会着销毁。

        2)当前的页(Fragment)为最后一页时,只有最后一页和倒数第二页内的控件存在内在中。


3、代码实现

三个Fragment,一个Adapter,三个RadioButton构建整个程序,然后更新里面TextView的内容,原代码实现如下:


1)fragment1.xml代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView
        android:id="@+id/tvN1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="t1" />
</LinearLayout>

2)fragment2.xml代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView
        android:id="@+id/tvN2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="t2" />
</LinearLayout>


3)fragment3.xml代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView
        android:id="@+id/tvNM3"
        android:layout_width

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值