A --> リストフラグメント
B --> フラグメントのリスト (A からの呼び出し)
C→Bと同じ(Bからの呼び出し)
これらの関数を使用して、 A から B を呼び出しています。
> FragmentManager fm = getFragmentManager();
> if (fm != null) {
> FragmentTransaction ft = fm.beginTransaction();
> ft.replace(R.id.fragment_content, entryListFragment);
> ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
> ft.addToBackStack(null);
> ft.commit();
これが私の FragmentActivity クラスです。
public class FragmentTabActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment_tab);
Commons.globalContext = this;
FragmentManager fm = getSupportFragmentManager();
TabFragment tabFragment = (TabFragment) fm.findFragmentById(R.id.fragment_tab);
}
@Override
public void onBackPressed() {
FragmentManager fm = getSupportFragmentManager();
Log.e("BACK STACK", "" + fm.getBackStackEntryCount());
if(fm.getBackStackEntryCount() > 0) {
fm.popBackStack();
}
}
}
B からバック プレスすると、A に戻ることができますが、C から B に戻ることはできません。助けてくれてありがとう
編集:私はこのように解決しました:
public class FragmentTabActivity extends FragmentActivity {
private Global globalClass;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
globalClass = ((Global) getApplicationContext());
setContentView(R.layout.activity_fragment_tab);
getSupportFragmentManager().addOnBackStackChangedListener(
new MainOnBackStackChangedListener());
}
private class MainOnBackStackChangedListener implements
OnBackStackChangedListener {
public void onBackStackChanged() {
Log.e("Stack COUNT", "" +
getSupportFragmentManager().getBackStackEntryCount());
}
}
@Override
public void onBackPressed() {
try {
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
int lastIndex=globalClass.historyList.size()-1;
globalClass.historyList.remove(lastIndex);
for (int i = 0; i <globalClass.counterForBackPress; i++) {
getSupportFragmentManager().popBackStack();
}
} else {
FragmentTabActivity.this.finish();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}