關於ViewPager和Fragment


1.如何獲取Fragement的引用?

Fragment fragement = getSupportFragmentManager().            findFragmentByTag("android:switcher:"+R.id.ViewPage+":" + selectTab);

 

這個Tag可以從FragmentPagerAdapter的源碼中找到,如下:

 

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        if (mCurTransaction == null) {
            mCurTransaction = mFragmentManager.beginTransaction();
        }

        // Do we already have this fragment?
        String name = makeFragmentName(container.getId(), position);
        Fragment fragment = mFragmentManager.findFragmentByTag(name);
        if (fragment != null) {
            if (DEBUG) Log.v(TAG, "Attaching item #" + position + ": f=" + fragment);
            mCurTransaction.attach(fragment);
        } else {
            fragment = getItem(position);
            if (DEBUG) Log.v(TAG, "Adding item #" + position + ": f=" + fragment);
            mCurTransaction.add(container.getId(), fragment,
                    makeFragmentName(container.getId(), position));
        }
        if (fragment != mCurrentPrimaryItem) {
            fragment.setMenuVisibility(false);
            fragment.setUserVisibleHint(false);
        }

        return fragment;
    }

 

 

其中的makeFragmentName方法產生的就是Tag

makeFragmentName的源碼:

private static String makeFragmentName(int viewId, int index) {
        return "android:switcher:" + viewId + ":" + index;
    }

 

 

2.如何更新Fragement?

如果你需要在某一時刻動態的更改Fragement的布局或重新加載布局,可以使用此方法:

/***
		 * 整體更新ViewPager的一個Fragement的內容
		 * 
		 * @param pager
		 *            需要更新的ViewPager
		 * @param position
		 *            需要更新的項目索引
		 * @param newView
		 *            更新后的View
		 * */
		private void upDataFragement(ViewPager pager, int position, View newView) {
			((FrameLayout) pager.getChildAt(position)).removeAllViews();
			((FrameLayout) pager.getChildAt(position)).addView(newView);
		}
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM