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);} @Overridepublic Fragment getItem(int position) { return fragments.get(position);} @Overridepublic int getCount() { return fragments.size();} @Overridepublic 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(); }
相關推薦
Fragment巢狀Fragment,Viewpager和Fragment聯動,懶載入
一、效果展示 二、主頁佈局 <?xml version="1.0" encoding="utf-8"?><!--主頁頁面--> <RelativeLayout xmlns:android="http://schemas.android.c
Android 多層fragment 巢狀時,viewPager不顯示的問題
版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/zkll200/article/details/73692518 先看一段錯誤程式碼,這段程式碼寫在一個 Fragment 中: private void initVi
Fragment巢狀Fragment和Viewpager
import android.app.Fragment; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.support.annotatio
PullToRefreshListView上拉和下拉+輪播圖多條目+fragment巢狀fragment+二次取樣+側拉點選切換fragment+PullToRefreshGritView圖片展示
側拉 程式碼 1提取的基類 1.1Activity的基類 package com.example.zonghelianxi02.ui.activity; import android.os.Bundle; import android.support.annotation.Nulla
Fragment巢狀,TabLatout,PullToRefreshListView
1.側拉布局 <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android=“http://schemas.android.com/apk/res
Android開發中,Fragment巢狀Fragments遇到的問題
Fragment,簡稱碎片,是Android 3.0(API11)提出的,為了相容低版本,support-v4庫中也開發了一套Fragment API,最低相容Android 1.6。 Fragment是依賴於Activity的,不能獨立存在的。 一個Acti
第16天ViewPager案例4:ViewPager+Fragment巢狀
第16天ViewPager案例4:ViewPager+Fragment巢狀 ViewPager 一.效果 二.思路: 三.父Viewpager程式碼 四.首頁Fragment程式碼 總結:程式碼結構:
Android開發-從原始碼分析Fragment巢狀PagerAdapter生命週期,解決重建問題
介紹 眾所周知在Android開發中Fragment的生命週期非常複雜,複雜得甚至讓Square公司提出了我為什麼主張反對使用Android Fragment轉而提倡使用自定義View組合替代Fragment。但是沒辦法公司專案還是使用了很多Fragment巢狀
Fragment巢狀ViewPager切換後資料消失ViewPager空白問題
getChildFragmentManager替換掉getFragmentManager 或者getSupportFragmentManager()問題就解決了。具體的原理是什麼,有待學習。 getFragmentManager到的是activity對所包含fragme
Fragment巢狀問題Fragment一個ViewPager展示子Fragment
我碰到的問題Fragment裡巢狀一個ViewPager展示子Fragment,展示子fragment第二次進入該fragment不顯示資料如果外層fragment每次切換都從新建立, oncreateview每次都從新執行,導致adapter重新new了,所以子fragment就不顯示了,保證外層的frag
Fragment巢狀高德地圖,切換黑屏,切換卡死退出解決方案
佈局: - 首頁Activity使用FragmentTabHost切換3個Fragment,Fragment1中巢狀2個Fragment,一個Fragment裝了高德地圖MapView,還有一個普通的Fragment; 問題1: - 在首頁從地圖Fragm
Android 中 Fragment 巢狀 Fragment使用存在的bug附完美解決方案
原文地址:https://blog.csdn.net/u014365133/article/details/73176068 自從Android3.0引入了Fragment之後,使用Activity去巢狀一些Fragment的做法也變得更加流行,這確實是Fra
側滑+fragment切換頁面+fragment巢狀+二次取樣+輪播圖+gridview展示圖片+網路請求資料+資料庫
全域性配置Appliction 所需要的依賴有:implementation ‘com.google.code.gson:gson:2.8.5’ implementation ‘com.nostra13.universalimageloader:universal-image-loader:
Fragment 巢狀 getChildFragmntManager FragmentManagerImpl.getFragment導致NullPointerExcep
這個問題很困擾我 一直搜尋相關的知識 直到在s'tack over flow上看到了一個人的提問 從評論中才將這個問題解決 不知道是什麼原理 但確實解決了我的問題 不知道怎麼轉載 現附上網址 希望可以幫大家解決困難 如果侵權 請留言給我 我會及時刪除
Android仿小米商城底部導航欄之二(BottomNavigationBar、ViewPager和Fragment的聯動使用)
簡介 在前文《Android仿小米商城底部導航欄(基於BottomNavigationBar)》我們使用BottomNavigationBar控制元件模仿實現了小米商城底部導航欄效果。接下來更進一步的,我們將通過BottomNavigationBar控制元件和
Fragment巢狀FragmentViewPager 正常使用姿勢
getFragmentManager到的是activity對所包含fragment的Manager,而如果是fragment巢狀fragment,那麼就需要利用getChildFragmentMan
Android開發ViewPager和Fragment結合使用實現新聞類app( 三 )(基本成型的app)
//該類為我們的標題欄的自定義View public class MyLinearLayout extends LinearLayout { public MyLinearLayout(Context context, AttributeSet attrs) { super(cont
Android中Fragment巢狀生命週期響應問題
問題闡述 : 主介面有四個Fragment 分別為A、B、C、D 這些為第一層Fragment(建立方式是由事務提交形式),其中B Fragment中佈局為ViewPager,裡面是放的三個Fragment 分別為B_1、B_2、B_3,這些稱為第二層Frag
Android ViewPager和Fragment實現仿微信導航介面及滑動效果
1 先看看實現的效果: ps:上面每一幀Fragment中,包含是來自網路的圖片; 實現ViewPager+Fragment的頁面滑動和底部導航原理 主佈局檔案如下: <?xml version="1.0" encoding="utf-8"?> <L
側滑+多條目+重新整理載入+fragment巢狀+Banner
MainActivity package com.bwie.mouthxx1; import android.support.design.widget.TabLayout; import android.support.v4.view.ViewPager;