Fragment嵌套Fragment,Viewpager和Fragment联动,懒加载

一、效果展示


二、主页布局


<?xml version="1.0" encoding="utf-8"?><!--主页页面-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <RelativeLayout
        android:id="@+id/ll_contest"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/content"
        android:layout_weight="1"
        android:orientation="vertical" />

    <LinearLayout
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="@drawable/bg_dibu"
        android:gravity="center"
        android:orientation="horizontal">


        <TextView
            android:id="@+id/main_home"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:clickable="true"
            android:drawablePadding="2dp"
            android:drawableTop="@drawable/main_btn_home"
            android:gravity="center"
            android:selectAllOnFocus="true"
            android:text="@string/home"
            android:textColor="@drawable/main_button_color"
            android:textSize="12dp" />

        <TextView
            android:id="@+id/main_tipoff"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:clickable="true"
            android:drawablePadding="2dp"
            android:drawableTop="@drawable/main_btn_tipoff"
            android:gravity="center"
            android:text="@string/tipoff"
            android:textColor="@drawable/main_button_color"
            android:textSize="12dp" />

        <View
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />

        <TextView
            android:id="@+id/main_thesun"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:clickable="true"
            android:drawablePadding="2dp"
            android:drawableTop="@drawable/main_btn_thesun"
            android:gravity="center"
            android:text="@string/thesun"
            android:textColor="@drawable/main_button_color"
            android:textSize="12dp" />

        <TextView
            android:id="@+id/main_own"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:clickable="true"
            android:drawablePadding="2dp"
            android:drawableTop="@drawable/main_btn_own"
            android:gravity="center"
            android:text="@string/own"
            android:textColor="@drawable/main_button_color"
            android:textSize="12dp" />
    </LinearLayout>

    <TextView
        android:id="@+id/main_live"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="0dp"
        android:clickable="true"
        android:drawablePadding="2dp"
        android:drawableTop="@drawable/main_btn_live"
        android:gravity="center"
        android:scaleType="centerInside"
        android:selectAllOnFocus="true"
        android:text="@string/live"
        android:textColor="@drawable/main_button_color"
        android:textSize="12dp" />
</RelativeLayout>


三、Fragment嵌套


ArratList<TextVeiw> views=new ArrayList();
 把底部的5个TextVeiw加入集合views中
  private void initView() {
    views = new ArrayList<>();
    views.clear();
    views.add(mainHome);
    views.add(mainTipoff);
    views.add(mainLive);
    views.add(mainThesun);
    views.add(mainOwn);
    views.get(0).setSelected(true);
}


四、TextView点击事件


@OnClick({R.id.main_live, R.id.main_home, R.id.main_tipoff, R.id.main_thesun, R.id.main_own})
public void onViewClicked(View view) {
    int current = oldIndex;
    switch (view.getId()) {
        case R.id.main_live:
            current = 2;
            break;
        case R.id.main_home:
            current = 0;
            break;
        case R.id.main_tipoff:
            current = 1;
            break;
        case R.id.main_thesun:
            current = 3;
            break;
        case R.id.main_own:
            current = 4;
            break;
    }
    showCurrentFragment(current);
}

五、初始化Fragment


/**
     * 初始化用到的Fragment
     */
    private void initFragments() {
        homeFragment = new HomeFragment();
        tipOffFragment = new TipOffFragment();
        getFragment = new GetFragment();
        sunFragment = new SunFragment();
        ownFragment = new OwnFragment();
        fragments = new ArrayList<>();
        fragments.clear();
        fragments.add(homeFragment);
        fragments.add(tipOffFragment);
        fragments.add(getFragment);
        fragments.add(sunFragment);
        fragments.add(ownFragment);
//        默认加载前两个Fragment,其中第一个展示,第二个隐藏
        getSupportFragmentManager().beginTransaction()
                .add(R.id.ll_contest, homeFragment)
              .add(R.id.ll_contest, tipOffFragment)
              .hide(tipOffFragment)
                .show(homeFragment)
                .commit();
        showCurrentFragment(0);

    }

六、处理Fragment的切换


/**
 * 展示当前选中的Fragment
 *
 * @param currentIndex
 */

 private void showCurrentFragment(int currentIndex) {int oldInex
    if (currentIndex != oldIndex) {
        views.get(oldIndex).setSelected(false);
        views.get(currentIndex).setSelected(true);
        FragmentTransaction ft = getSupportFragmentManager()
                .beginTransaction();
        ft.hide(fragments.get(oldIndex));
        if (!fragments.get(currentIndex).isAdded()) {
            ft.add(R.id.ll_contest, fragments.get(currentIndex));
        }
        ft.show(fragments.get(currentIndex)).commit();
        oldIndex = currentIndex;
    }
}

七、fragment的布局


<android.support.design.widget.TabLayout
    android:id="@+id/tablayout_topoff"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    app:tabIndicatorColor="@color/cf62c52"
    app:tabIndicatorHeight="3dp"
    app:tabSelectedTextColor="@color/cf62c52"
    app:tabTextColor="@color/c676767" />

<android.support.v4.view.ViewPager
    android:id="@+id/vp_topoff"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp">

</android.support.v4.view.ViewPager>

八、内部fragment的使用,viewPager的联动



tablayoutTopoff  //布局中的TabLayout文件。
vpTopoff //是布局中的内部的viewpager
//设置适配器myPaperAdapter = new MyPaperAdapter(getFragmentManager());vpTopoff.setAdapter(myPaperAdapter);/*//设置tablout 滑动模式tablayoutTopoff.setTabMode(TabLayout.MODE_SCROLLABLE);*///联系tabLayout和viwpagertablayoutTopoff.setupWithViewPager(vpTopoff);



九、内部fragment的适配器,setTitle


/**
 * 设置头目
 */
private Fragment setTitle(Fragment fragment, String title,int i) {
    Bundle args = new Bundle();
    args.putString("title", title);
    args.putInt("conditionType",i);  //区分fragment的位置,以便fragment相似时,创建同一的内部baseFragment
    fragment.setArguments(args);
    return fragment;
}

fragments //下面显示fragment的集合

/** * 适配器 */private class MyPaperAdapter extends FragmentPagerAdapter { public MyPaperAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return fragments.get(position); } @Override public int getCount() { return fragments.size(); } @Override public CharSequence getPageTitle(int position) { //设置tablayout的标题 return fragments.get(position).getArguments().getString("title"); }}

十、baseFragment的不同之处 

   setUserVisibleHint(Boolean)在fragment所有初始化方法之前调用,在fragment可视化发生变化是调用。  在onVisible中,表示用户可见。

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) {       //fragment的显示改变,调用的方法。初始化在
    super.setUserVisibleHint(isVisibleToUser);
    if (getUserVisibleHint()) {
        isVisable = true;
        //初始化完成,切处于可见状态
        onVisible();
    } else {
        isVisable = false;
        onInVisible();
    }
}

protected void onInVisible() {

}

protected void onVisible() {
    initData();
}

十一、initData()--加载数据的方法  方法的使用;

注意: 当第一个Fragment在创建时,在onAtach,onCraet方法之前调用,fragment还没有初始化。


所以在initData()中,应该对执行条件进行限制:

Boolean  isPrepared=fasle;
public void initData() {
    if (!isPrepared || !isVisable) {  //加载数据判断是否可见,进行懒加载  isPrepared 是判断Fragment是否初始化的条件
        return;
    }
//加载数据
}

public void onCreat(){
   super.onCreat();
   isPrepared=true;
   initData();

}



  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值