我有一個android應用程序,我在NAVIGATION_MODE_TABS模式下使用ActionBar。ActionBar Android
目前,我大量使用碎片。所以,對於顯示的選項卡來說工作得很好。我正面臨一個設計問題,我認爲我的方向是錯誤的。
MainActivity有三個選項卡。特別是一個選項卡上有一堆導航。
MainActivity
- TAB1
- TAB2
- TAB3(這有應顯示基於用戶點擊了哪些不同的片段按鈕)
要求是保持標籤總是可以看到相同的文字。所以,我最終創建了一系列活動,這些活動從MainActivity繼承,我根據用戶點擊的內容製作了第三個標籤內容。
這使我能夠保持內容流暢,並保持外觀一致。但是,創建活動似乎是一種開銷。
我試圖利用FragmentManager和pushToStack。然而,這條路線似乎並不奏效。
我靠這個接口ActionBar.TabListener要正確安裝,當用戶點擊選項卡上的分離基於片段。那很好。然而,我介紹一個看起來有問題的不同片段。
希望這很清楚,我正在尋找最好的建議。
我解決它通過依靠以下邏輯:
public class FragmentTabListener implements ActionBar.TabListener
{
private String _fragmentClassName;
private Context _context;
private Fragment _fragment;
private Boolean _cleanStack = true;
public FragmentTabListener(Context context, String fragmentClassName,
Boolean cleanStack)
{
_context = context;
_fragmentClassName = fragmentClassName;
_cleanStack = cleanStack;
}
public FragmentTabListener(Context context, String fragmentClassName)
{
this(context, fragmentClassName, false);
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft)
{
cleanFragmentManagerStack();
if (this._cleanStack)
{
ft.attach(_fragment);
}
}
private void cleanFragmentManagerStack()
{
if (this._cleanStack)
{
FragmentManager mgr = ((Activity) _context).getFragmentManager();
int backStackCount = mgr.getBackStackEntryCount();
for (int i = 0; i < backStackCount; i++)
{
// Get the back stack fragment id.
int backStackId = mgr.getBackStackEntryAt(i).getId();
mgr.popBackStack(backStackId,
FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
}
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft)
{
if (_fragment == null)
{
_fragment = Fragment.instantiate(_context, _fragmentClassName);
ft.add(android.R.id.content, _fragment);
}
else
{
ft.attach(_fragment);
}
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft)
{
this.cleanFragmentManagerStack();
// TODO Auto-generated method stub
ft.detach(_fragment);
}
}
對我原先的片段的任何行動,我被添加到片段當前堆棧。
這工作。希望它能幫助別人。
感謝您的建議。如果它在支持庫中受支持,我正在查看它。我不想將自己鎖定在更新的API中,這樣我可以讓應用程序適用於較舊的模型。 謝謝, – Sam
我使用的支持庫也爲類似的事情。實際上,據我所知,你只能在ViewPager中使用支持片段。 – Ciprian