コンテナーとナビゲーション ドロワーを備えた単一のアクティビティを含む Android アプリケーションを作成しようとしています。最初は空のコンテナは、次のようにフラグメントをロードViewPager
するタブレイアウト内にあるフラグメントをロードしますFragmentTransaction
。
public static void replaceFragmentInContainer(FragmentManager fragmentManager, Fragment fragmentToShow,
boolean addToBackStack)
{
FragmentTransaction transaction = fragmentManager.beginTransaction();
if (addToBackStack)
{
transaction.addToBackStack(null);
}
transaction.replace(R.id.container, fragmentToShow);
transaction.commit();
}
ActionBar
v7 の v7でv4 フラグメントを使用していActionBarActivity
ます。
ロードされたすべてのフラグメントは、実際の使いやすさを保持する他のフラグメントを含むタブのみをロードするフラグメントです。このようなタブ読み込みフラグメントの例:
public class MainFragment extends TabsFragment
{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
super.onCreateView(inflater, container, savedInstanceState);
View contentView = inflater.inflate(R.layout.fragment_main, container, false);
initTabsLayout(savedInstanceState, contentView, R.id.pager);
addTab("tabspectag1", "", R.drawable.draw1, Fragment1.class, null);
addTab("tabspectag2", "", R.drawable.draw2, Fragment2.class, null);
addTab("tabspectag3", "", R.drawable.draw3, Fragment3.class, null);
return contentView;
}
私が直面している問題は、バックスタックにあります。フラグメントがバックスタックに追加され、戻るボタンを押すと、アプリは希望どおりに前のフラグメントに戻り、タブのレイアウト自体は表示されますが、何も読み込まれていないようにタブの内容は空ですそのタブ。それが発生した場合、ナビゲーションドロワーでその画面を再度選択したときにのみ、タブのコンテンツをリロードすることができます。
onBackPressed
アクティビティでをオーバーライドしようとしました:
@Override
public void onBackPressed()
{
if (getFragmentManager().getBackStackEntryCount() > 0)
{
getFragmentManager().popBackStack();
} else
{
super.onBackPressed();
}
}
しかし、私が言ったように、前のフラグメントに戻っているようですが、そのフラグメント内のタブはフラグメントを再描画していません。
この問題を解決するにはどうすればよいですか?
バックスタックの元のフラグメントのタブ レイアウトは表示されますが、タブ内のフラグメントは表示されないため、タブのコンテンツを何らかの方法で更新して再描画する必要がある可能性はありますか? そんなことができるとしたら、どうすればいいですか?