2012-08-04 14 views
7

私の主な活動では、私はNAVIGATION_MODE_TABSのアクションバーを持っています。各タブの内容はリストフラグメントです。フラグメント取引、アクションバー&バックスタック

リストアイテムをクリックすると、新しいフラグメントが表示され、アクションバーモードがNAVIGATION_MODE_STANDARDに変更され、タブが非表示になるようにしたいと考えています。

私は、これは次のコードで動作するように得ることができました

:listitemclick方法で

 ActionBar actionBar = getActivity().getActionBar(); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 

     Fragment albumListFragment = new AlbumListFragment(); 
     albumListFragment.setArguments(bundle); 
     FragmentTransaction ft = getFragmentManager().beginTransaction(); 

     ft.replace(android.R.id.content, albumListFragment); 
     ft.addToBackStack(null); 

     // Commit the transaction 
     ft.commit(); 

     Log.i("FragmentList", "Item clicked: " + id); 

問題は、私は戻ってボタンを押すと、タブがまだ、なくなっているです前の断片は再び見えません。

私は何か間違っていますか?断片のバックスタックとは何か?私はそれを別の方法で行くべきか、あるいはバックプレスをオーバーライドする必要がありますか?明確にするために

--Edit--

- 私はfragmenttransaction.replaceを呼び出すときaddToBackStackを呼び出していますが、私は戻ってボタンを押すと、前の断片が復元されません。

+0

一度このリンクを確認してください。http://www.vogella.com/articles/Android/article.html#fragments_tutorial – shassss

+0

ありがとうございますが、この質問には特に役に立ちません。 –

+0

addToBackStackを使用すると、あなたは何をしたいですか? 'ft.addToBackStack(null);の代わりにhttp://developer.android.com/guide/components/fragments.html#Transactions – Frohnzie

答えて

-1

バックスラックは、現在のアクティビティを終了し、前のフラグメントではなく、前のアクティビティに移動します。 (バックスタックガイド:http://developer.android.com/guide/components/tasks-and-back-stack.htmlを参照してください)。

あなたは、提案したように、onBackPressedをオーバーライドすることによって動作を強制することができますが、私はそのような方法で自然なAndroidの動作を変更することはできません。似たようなことをしている他のアプリ、特にコアアプリを見ると、戻るボタンは前の断片には行きませんが、以前の活動には行きます。

また、「上」ボタン(つまり、左矢印付きのアクションバーのアプリアイコン)の動作を完全に制御できます。あなたは、ActionBarガイドで説明されているようにボタンとして使用するようにプログラムで設定する必要があります(これを行う方法を知っている必要がある場合はお知らせください)、スタック上に前のフラグメントを設定することができますどこかを維持する。

+0

ドキュメントから:commit()を呼び出す前に、フラグメントトランザクションのバックスタックにトランザクションを追加するために、addToBackStack()を呼び出すことができます。このバック・スタックはアクティビティーによって管理され、ユーザーは「戻る」ボタンを押すことにより、前のフラグメント状態に戻ることができます。 – Frohnzie

+0

@Frohnzieはそれに感謝しますが、問題は私がaddToBAckStack()を使用していて、私が戻るときに前のフラグメントを復元していないことです。 –

+0

@rascuacheコードが正しいように見えます。私はまったく同じことをしました。私は問題が何であるか分かりません。 addToBackStackの使用は正しいことです。たぶんあなたはもっとコードを投稿することができます。 – Frohnzie

0

私はまったく同じ問題を経験し、NAVIGATION_MODE_STANDARDにActionBarを設定し直したときにのみ問題が発生することがわかりました。

NAVIGATION_MODE_STANDARDを持つヘルパーアクティビティにタブのない新しいフラグメントを配置することが私にとって唯一の解決策でした。 Androidで提供されている戻るボタンの機能を簡単に使用して、NAVIGATION_MODE_TABSでアクティビティに戻り、その状態を保持することができます。

1

これは少し遅れたかもしれませんが、何時間もあなたの問題を再構築しようとしましたが、成功しませんでした。あなたの質問に記載されている方法(つまり、ft.replace(android.R.id.content、albumListFragment);)でActionBar Tabでホストされているフラグメントのリストビューから別のビューに切り替えようとしましたが、効果はありませんでした。いくつかのGoogleとstackoverflowの後、私はthis wayを使用してタブ内のフラグメントを正常に切り替えることができますが、問題はありません。

android developer guideに説明するように、そのおそらくbackstackの元に戻すと、UIの変化による、問題を「アクションバーが正しく表示されていない」として。 onBackStackChanged()コールバックをオーバーライドしてUIを再構築しようとするかもしれません。

"バックスタックは前のフラグメントを戻しません"という問題があるため、他の人が問題を再構築して回答を見つけるのに役立つもう少しコードを投稿したいことがあります。

参考になりました。

関連する問題