2011-10-17 150 views
0

嗨我正在查看尋呼機和片段。我想覆蓋方向更改,以便onCreateView方法不會在每次方向更改時都運行。這是因爲我的應用在onCreateView中運行很多,導致方向變化緩慢。此外,我的服務器上的東西都被檢查,而不是太多,所以沒有理由只是因爲方向改變而運行它。Android的片段充氣佈局

這裏是我所成立至今

我在清單

android:configChanges="orientation|keyboardHidden" 

有這樣的在MainActivity然後我在我的片段使用此

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    getLayoutInflater(getArguments()).inflate(R.layout.main, null, false); 
    Toast.makeText(getActivity(), "changed orientation", Toast.LENGTH_LONG).show(); 
} 

當我運行應用程序並切換方向時,我會看到烤麪包,但佈局永遠不會改變爲風景。所以我決定,也許android只是沒有意識到它是在風景,因爲我壓倒了它,但改變佈局爲荒謬的,就像一個對話框的佈局不會導致一個力量關閉或任何東西它保持肖像佈局被拉伸因此,我知道如何擴大布局有什麼問題。

如果在viewpager中更改方向時更改佈局的任何幫助將不勝感激。

謝謝!

回答

2

1)你應該把所有的服務器檢查例程和其他一次性操作在片段onCreate(),而不是onCreateView()。如果您需要在加載時顯示某種「正在加載...」屏幕,則我會建議使用FragmentActivity來擴充至少包含「正在加載...」類型的FrameLayout的佈局圖形。首先,FragmentActivity將運行onCreate(),它將首先膨脹初始View,然後實例化Fragment。將服務器檢查代碼放在Fragment的onCreate()中,然後在其onCreateView()方法中爲這個片段膨脹任何視圖。下面是我的一個項目的樣本初始化一個麥克風按鈕,這實在是一個片段:

<FrameLayout 
     android:id="@+id/recorder_mic_fragment" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     /> 

然後,麥克風片段實際上是由Java代碼實例:

// make the Mic button 
FragmentManager fragMgr = getFragmentManager(); 
FragmentTransaction xact = fragMgr.beginTransaction(); 
if (null == fragMgr.findFragmentByTag(FRAG_TAG)) { 
    xact.add(R.id.mic_button_frame, MicFragment.newInstance(queryType), FRAG_TAG).commit(); 
} 

FRAG_TAG是實際上是一個獨一無二的標籤名稱,你給一個與片段的R.id不同的片段實例。這樣,您可以使用findFragmentByTag()來確保片段在您需要的所有位置正確實例化。

如果您想要在碎片中加載碎片,就像我的應用程序實際工作一樣,您可以稍微按摩一下這段代碼。如果你有一個片段會誇大其中一個可能的視圖,那麼使用if語句來選擇適當的幀ID並指定一個唯一的FRAG_TAG。我會建議使用獨立的R.id來爲每個爲片段創建的FrameLayout。 (例如,如果該片段可能爲膨脹的信息,哼哼,和歌詞不同的看法,那麼我對每個麥克風片段標籤名稱是MetaMicButtonHumMicButtonLyricsMicButton。我還需要之間進行選擇R.id.meta_mic_button_frame等。)

2)在縱向和橫向模式之間切換時,需要在文件夾res/layout和res/layout_land中定義不同的XML佈局。 (或者,如果您想將橫向模式視爲默認模式,則可以製作res/layout和res/layout_port)。請檢查以下鏈接:http://developer.android.com/guide/topics/resources/providing-resources.html#AlternativeResources您可以根據屏幕大小,語言,停靠模式,夜間模式及其任意組合來定義不同的佈局。