2012-03-22 21 views
7

誰かが私に説明したり、フラグメントになると画面の向きをどのように扱うべきかのリンクや例を指し示すことができますか?私が現時点で抱えている問題は、3つのタブを持つアクションバーがあるアプリがあることです。各タブには1つのフラグメントが含まれます。私はアクションバーのタブを使ったフラグメント処理画面の向き

actionbar.setSelectedNavigationItem(1) 

がノー混乱のために、他のタブが表示されますが、私はそれらをクリックしたときに何も起こらない(示されている使用して、選択したとして、私は設定し、唯一つのフラグメントのデバイスを反転するときだから、彼らがすることはできませんその内容は決して表示されません)。このような場合には何かがありますか?誰かが私に助言を与えることができます、私はそれを感謝します。ありがとう。

答えて

13

私は同じ問題を抱えていたし、ここに解決策を見つけた: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentTabs.html

問題は、フラグメントは、以前に保存した状態から、タブのために既に存在していることです。それらを無効にする必要があります。

ここにあなたのTabListenerのコンストラクタのコード・スニペットです:

public TabListener(Activity activity, String tag, Class<T> clz, Bundle args) { 
     mActivity = activity; 
     mTag = tag; 
     mClass = clz; 
     mArgs = args; 

     // Check to see if we already have a fragment for this tab, probably 
     // from a previously saved state. If so, deactivate it, because our 
     // initial state is that a tab isn't shown. 
     mFragment = mActivity.getFragmentManager().findFragmentByTag(mTag); 
     if (mFragment != null && !mFragment.isDetached()) { 
      FragmentTransaction ft = mActivity.getFragmentManager().beginTransaction(); 
      ft.detach(mFragment); 
      ft.commit(); 
     } 
    } 

は、私はあなたを助けることができる願っています。

+0

私は同じことを2,3日前に考えました。しかし、それをもう少し別の方法で解決しました。フラグメントのonDestroyViewメソッドでは、その特定のフラグメントのremoveを呼び出すので、以前の状態のフラグメントではありません。しかし、あなたのやり方でも問題は解決されると思います。だから、ありがとう! – Sandra

+0

よく説明されているように、特定の共通の問題を解決します。どうもありがとう。 A + – LeffelMania

+1

ありがとう!ところで、デタッチ/アタッチの代わりにhide/showを使用すると、フラグメントビューのレクリエーションを避けることができます(時には長くなります)。そしてそれはあまりにも機能します。 –

関連する問題