編輯:關於Android編程
Viewpager + FragmentPagerAdapter 情況下 才好使; FragmentPagerAdapter 有一個特點 凡是加載過的Fragment 都會被保留,既然Fragment不會被銷毀,那我們就可以使用findFragmentByTag() 方法找到它;但問題是動態創建的話 tag的設置;我們知道動態加載時是可以設置tag的,但是動態創建就沒法設置了;如果viewpager使用的是適配器是 FragmentPagerAdapter 的話 ,Fragment就會被設置上tag 根據這個tag 我們就可以獲取到當前顯示的fragment了;下面看看這個過程
新創建時 tag ==null
@Override public Fragment getItem(int position) { PageTab pageTab = tabs.get(position); TabFragment tab = new TabFragment(); Log.e(TAG,"====getItem===新創建時的tag:=="+tab.getTag()); tab.getArguments().putSerializable("tab",pageTab); //取出數據 新建Fragment return tab; }
Log 查看 tag 時為 null
E/FileListPagerAdapter: ====getItem===新創建時的tag:==null
將 適配器設置給Viewpager後 的tag
E/MainActivity: ==findCurrentFragment==pagerId:2131492976 E/MainActivity: ==findCurrentFragment==currentItem:0 E/MainActivity: =======findCurrentFragment=========完整Tag===android:switcher:2131492976:0 E/MainActivity: =======findCurrentFragment=========當前顯示的Fragment 的tag===:android:switcher:2131492976:0
可以看到 tag的組成;四部分
- android : 固定部分
- switcher : 固定部分
- 2131492976 : ViewPager 的id
- 0 : ViewPager 當前顯示的itemPostion既然FragmentPagerAdapter的特點是保存fragment狀態。 就可以利用這個特點通過 findFragmentByTag() 找到這個Fragment
//Viewpager + FragmentPagerAdapter 情況下 獲取 當前顯示的Fragment,只能找已經加載過的Fragment Fragment fragment = getSupportFragmentManager().findFragmentByTag("android:switcher:"+pager.getId()+":"+pager.getCurrentItem());
這個方法在每次viewpager滑動後都會被調用 而 object參數就是顯示的Fragment ;可以在適配器中定義個變量 currentFragment 每次改變時都會獲取到顯示的Fragment
@Override public void setPrimaryItem(ViewGroup container, int position, Object object) { currentFragment = (TabFragment) object; super.setPrimaryItem(container, position, object); }
這種方式有一個缺陷 setPrimaryItem()是在 viewpager的滑動監聽執行完後才會調用的;所以在 換的個滑動監聽中獲取當前顯示的Fragment 是不對的
一、 看效果二、上代碼package com.framework.widget;import android.app.Activity;import android.co
來這實習已經10多天了,今天整理整理學習時的Android筆記。正所謂好記性不如爛筆頭,今天來說說service組件。 service可以在和多
本文目標實現控制小飛機的左右移動、躲避子彈、打boss。本節實現 開始菜單界面1、首先 資源文件拷過來2、劃分游戲狀態 public static final int G
這篇文章開始, 我們來了解一下android 7的一些新特性, 話說今年android 7預覽版本來的比以往都稍早一些, 這樣對於我們開發者來說算是一個好消息, 我們可以