在我描述我的當前設置,我將描述我的問題。我需要在單獨的選項卡內的片段之間進行分層導航。假設我在一個標籤中向下鑽取,然後切換選項卡,然後返回到第一個原始選項卡,我需要將它放在鑽孔級別上,然後有能力返回到最高級別標籤。
現在進入我的設置。
我有一個應用程序,名爲MainActivity
。該活動控制了我的選項卡式操作欄。我選擇了一個選項卡後,我遵循許多不同的教程來處理片段切換,下面的代碼提示您注意onTabSelected
和onTabUnselected
方法。
MainActivity - 選項卡監聽器
public static class MyTabListener<T extends Fragment> implements ActionBar.TabListener {
private final Activity mActivity;
private final String mTag;
private final Class<T> mClass;
private final Bundle mArgs;
private Fragment mFragment;
public MyTabListener(Activity activity, String tag, Class<T> clz) {
this(activity, tag, clz, null);
}
public MyTabListener(Activity activity, String tag, Class<T> clz, Bundle args) {
mActivity = activity;
mTag = tag;
mClass = clz;
mArgs = args;
// Check to see if we already have a fragment for this tab, probably
// from a previously saved state. If so, deactivate it, because our
// initial state is that a tab isn't shown.
mFragment = mActivity.getFragmentManager().findFragmentByTag(mTag);
if (mFragment != null && !mFragment.isDetached()) {
FragmentTransaction ft = mActivity.getFragmentManager().beginTransaction();
ft.detach(mFragment);
ft.commit();
}
}
public void onTabSelected(Tab tab, FragmentTransaction ft) {
Log.e("FRAGMENT","Selected Fragment With Tag " + mTag);
if (mFragment == null) {
mFragment = Fragment.instantiate(mActivity, mClass.getName(), mArgs);
ft.add(android.R.id.content, mFragment, mTag);
} else {
ft.attach(mFragment);
}
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
if (mFragment != null) {
ft.detach(mFragment);
}
}
public void onTabReselected(Tab tab, FragmentTransaction ft) {
Toast.makeText(mActivity, "Reselected!", Toast.LENGTH_SHORT).show();
}
}
當我在觀看Tab1
片段Fragment1', when a button is pressed I then show another
called
Fragment2`,我需要從回去的能力。下面的代碼工作,如果我只是留在該標籤,但是當從標籤導航離開並返回到它時,一切都搞砸了。
MainActivity - 顯示第二個片段
Fragment tdFrag = Fragment.instantiate(this, SecondFragment.class.getName());
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(android.R.id.content, tdFrag, "secondfrag");
ft.addToBackStack(null);
ft.commit();
我的思想
我想,那一定是我卸下片段和處理的方式,當按下一個新的標籤頁切換。也許我需要實現某種方式來爲每個選項卡存儲每個單獨的後臺堆棧並從中加載碎片而不是系統後端堆棧?
任何幫助將是偉大的。我試圖儘可能徹底和簡單地解釋它。
在此先感謝。
你可以使用Activity.onBackPressed()方法 – ffleandro