2011-10-17 3 views
5

他のフラグメントを起動するフラグメントを処理する最良の方法についてのアドバイスを探しています。現在のフラグメントと同じスペースに新しいフラグメントをロードする方法

私は、アクティビティベースのアプローチを使用して書き始めたアプリケーションを変換してから、それをフラグメントを使用するように移動し始めました。私は新しいアクティビティを開始するために使用されたいくつかのフラグメントを持っており、現在のフラグメントが存在するのと同じビューで他のフラグメントを起動するようにそれらを移動したい。

たとえば、私はWebViewClientを使用して内部js-> java対話を処理するWebViewを持つアクティビティを持っています。そう - このWebViewの活動は、フルスクリーンまたは側のメニューを表示してのいずれかであることができるが、私はWebViewのレイアウトを尊重したい

i = new Intent(context, GoogleMapActivity.class); 
startActivity(i); 

:私WebViewClientは私が行うために使用される他の活動を、起動することができますメニューが表示されている場合は、新しいフラグメントを起動するときに表示されたままにしておく必要があります。フラグメントを起動するコードを作成するための最良の方法はわかりません。

これは、フラグメント内に、現在のフラグメントと同じスペースに読み込まれる新しいフラグメントを基本的に指示する方法があるのですか、またはアクティビティと何らかの相互作用が必要ですか?

** EDIT **

使用することができ、いくつかの異なるレイアウトがあることを考えると、私はいつも私がフラグメントを置くために標的にされるべきであるIDがわからない - それゆえ私はかどうかを知る必要がありidを知らなくてもこれを行う方法があります(たとえばreplaceメソッドのように)。

+0

表情。 http://stackoverflow.com/questions/7790945/how-can-i-use-fragmentmanager-to-display-fragment-abc-in-a-framelayout/7791116#7791116 –

答えて

5
getFragmentManager().beginTransaction() 
    .replace(((ViewGroup) getView().getParent()).getId(), fragment) 
    .addToBackStack(null) 
    .commit(); 

これは、親コンテナを目的のフラグメントに置き換える必要があります。

0

これはFragementManager.replace()で行うことができます。 documentation for Fragmentをご覧ください。特に、「レイアウト」セクションの長い例をご覧ください。

+0

いくつかの異なるレイアウトがあるとすればフラグメントを入れるためにどのIDをターゲットにすべきかわからないので、IDを知らずにこれを行う方法があるかどうかを知る必要があります。または、私がどのようなアプローチをとるべきか - つまり、同じIDのすべてのフラグメントに名前を付ける必要がありますか? – Martyn

+1

タグを使ってフラグメントを取得することもできます。その後、idの代わりにreplaceで、最初の引数をフラグメントとして渡すことができます。 –

-1

あなたは、むしろそれを置き換えるフラグメントを追加したい場合は、使用:この質問で

getFragmentManager().beginTransaction().add(R.id.fragment_container, new Fragment()).commit(); 
関連する問題