ここに私のコードです。 'currentFragment'は、現在表示されているものを追跡するフィールドです。これは、それ自身がフラグメントであるクラスにあります(したがって、フラグメントを示すフラグメントがあります)。フラグメントのonCreateView()が呼び出されないようにするにはどうすればよいですか?
private void selectNavBarItem(NavbarItem v)
{
Fragment fragmentToUse = null;
if (v == setpointsNavItem)
{
fragmentToUse = setpointsFragment;
}
else if (v == rapidSetupNavItem)
{
fragmentToUse = rapidSetupFragment;
}
else if (v == outdoorResetNavItem)
{
fragmentToUse = outdoorResetFragment;
}
else if (v == rampDelayNavItem)
{
fragmentToUse = rampDelayFragment;
}
if (fragmentToUse != null)
{
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
if (currentFragment != null)
{
ft.detach(currentFragment);
}
currentFragment = fragmentToUse;
if (currentFragment.isDetached())
{
ft.attach(currentFragment);
}
else
{
ft.add(R.id.setup_content_holder, currentFragment);
}
ft.addToBackStack(null);
ft.commit();
}
すべてが偉大に見えるが、ビューは、すべてのフラグメント(onCreateView()とonViewCreated())のために再作成なっています。私は、着脱がうまくいくことを期待していましたが、そうではありません。私がビューを維持したい理由は、ユーザーが選択したものが、彼らが戻ってくるときにそこに残っているからです。
もう1つのオプションが表示され、隠れていますが、このコードを所有するフラグメントに追加したいフラグメントを保持するFrameLayout(R.id.setup_content_holder)があるため、その作業を行う方法がわかりません。 4つのフラグメントを追加するだけではなく、3つのフラグメントを隠すことはできません。コンテナのないフラグメントを追加するオプションがありますが、どのように動作するはずです。
だから、どんなアイデアですか?
私はバンドルを使用したくありません。フィールドを変更すると、コンパイル時のチェックの不足はもちろんのこと、メンテナンスが多くなります。あなたの答えに違反することはありません - 私はAndroidが私にそれをやりたいと思う方法だと確信しています。私の新しいアプローチ(私の新しい答えを見てください)が良いアイデアかどうかは分かりますか? –