一、效果展示
二、主页布局
<?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的联动
//设置适配器myPaperAdapter = new MyPaperAdapter(getFragmentManager());vpTopoff.setAdapter(myPaperAdapter);/*//设置tablout 滑动模式tablayoutTopoff.setTabMode(TabLayout.MODE_SCROLLABLE);*///联系tabLayout和viwpagertablayoutTopoff.setupWithViewPager(vpTopoff);tablayoutTopoff //布局中的TabLayout文件。 vpTopoff //是布局中的内部的viewpager
九、内部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(); }