Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android開發 Fragment嵌套調用常見錯誤

android開發 Fragment嵌套調用常見錯誤

編輯:關於Android編程

在activity中有時需要嵌套調用fragment,但嵌套調用往往帶來視圖的顯示與預期的不一樣或是fragment的切換有問題。在使用時要注意幾點:


1、fragment中嵌套fragment,子fragment視圖無法顯示:


如下:
父fragment的.xml文件:


 

子fragment的xml文件:

 


此時運行的顯示結果如下:

 

\

 

只有父的視圖顯示,並沒有嵌套到子的視圖中,分析原因是父的視圖一直顯示而沒有被覆蓋,且因為其布局:

 

 android:layout_width=match_parent
    android:layout_height=match_parent

為填充整個屏幕,所以無法顯示。我們將layout_width與layout_height改為wrap_content,結果如下:

 

\

為了讓子Fragment可以充滿屏幕,父Fragment必須用FrameLayout的布局方式。即修改父.xml文件為:

 

<framelayout android:id="@+id/mainfrag" android:layout_height="match_parent" android:layout_width="match_parent" xmlns:android="http://schemas.android.com/apk/res/android"></framelayout>

結果為:

 

\

 

2、要在各個Fragment間切換,必須要有一個fragmentmanager可以管理所有的fragment,這樣在進行切換時才能用fragmengmanager調用transaction對這些fragment進行操作。

比如如下結構的demo:

Mainactivity包含fragment1,fragment1又包含fragment2.這樣為了讓fragment1與fragmeng2切換,在Mainactivity中包含fragmengmanager fm來對1、2切換,代碼如下(在Mainactivity.java中):

 

 

	public static void switchContent(Fragment from,Fragment to,String toTag){
		if(from!=to){
			FragmentTransaction transaction=fm.beginTransaction();
			transaction.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out);
			if(!to.isAdded()){
				transaction.hide(from).add(R.id.container, to,toTag).commit();
			}else{
				transaction.hide(from).show(to).commit();
			}
		}	
	}

在fragment1的.java文件中調用上述靜態方法即可。這裡不能在fragment1中用getChildFragmentManager對fragmeng2進行管理,因為這樣會導致2作為1的子視圖,在調用:
transaction.hide(fragment1).add(R.id.container, fragment2,frag2).commit();
時由於,將fragment1隱藏,此事fragment2也跟著隱藏,屏幕將一片空白。

 

 

此文章僅供大家出現問題時,提供一個思路,並不是技術貼,望大神們勿噴

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved