アプリケーションは、タブの下にあるフラグメント画面を更新する次のコードをtabs
すべて選択することで実現しています。tab
public class MainActivity extends ActionBarActivity{
Fragment f = null;
TabFragment tf = null;
List<Fragment> fragList = new ArrayList<Fragment>();
int tabIndex;
public void onTabSelected(Tab tab, FragmentTransaction ft) {
tabIndex = tab.getPosition();
if (fragList.size() > tab.getPosition())
fragList.get(tab.getPosition());
if (f == null) {
tf = new TabFragment();
Bundle data = new Bundle();
data.putInt("index", tabIndex);
data.putString("extraString", "noreloading");
tf.setArguments(data);
fragList.add(tf);
}
else
tf = (TabFragment) f;
ft.replace(android.R.id.content, tf);
}
したがって、各タブで更新するフラグメント クラスは 1 つだけです。
すべてが正常に機能しています。にフラグメントがありませんbackstack
。それが私が欲しかったものです。しかし、そのオプションを選択することでメニューが表示さactionbar
れ、新しいコンテンツでフラグメントをリロードする必要があります。そこで、メインアクティビティで次のことを行いました。
public void menuSelected(){
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
// fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE) added clear backstack here no use.
tf = new TabFragment();
Bundle data = new Bundle();
data.putInt("index", tabIndex);
data.putString("extraString", "reload");
tf.setArguments(data);
fragList.add(tf);
ft.addToBackStack(null);
ft.commit();
ft.replace(android.R.id.content, tf);
}
}
ここで何が起こるか、新しいデータでリロードされますが、戻るボタンbackstack
を押すと前のフラグメントが存在します。
したがって、にフラグメントは必要ありません。フラグメントのコンテンツを置き換え/リロードしたいだけです。
誰かがこれを解決する方法を提案できますか? 完全に 2 つのフラグメントがあると仮定すると、1 つは前のフラグメントで、もう 1 つはリロードされたフラグメントです。別のメニューを押してからもう一度メニューを押すと、全部で 4 つのフラグメントがあります。backstack
tab