Fix bug 3093591 - add richer control over default tab selection in ActionBar
Added overloads to ActionBar#addTab with control over whether the added tab
will become selected or not. Old versions implemented in terms of the new.
Change-Id: I810c64652bb7e755b81151ce8a2c765266d78a66
diff --git a/core/java/com/android/internal/app/ActionBarImpl.java b/core/java/com/android/internal/app/ActionBarImpl.java
index f4a041c..1d612e2 100644
--- a/core/java/com/android/internal/app/ActionBarImpl.java
+++ b/core/java/com/android/internal/app/ActionBarImpl.java
@@ -255,7 +255,6 @@
private void configureTab(Tab tab, int position) {
final TabImpl tabi = (TabImpl) tab;
- final boolean isFirstTab = mTabs.isEmpty();
final ActionBar.TabListener callback = tabi.getCallback();
if (callback == null) {
@@ -265,26 +264,38 @@
tabi.setPosition(position);
mTabs.add(position, tabi);
- if (isFirstTab) {
- final FragmentTransaction trans = mActivity.getFragmentManager().openTransaction();
- mSelectedTab = tabi;
- callback.onTabSelected(tab, trans);
- if (!trans.isEmpty()) {
- trans.commit();
- }
+ final int count = mTabs.size();
+ for (int i = position + 1; i < count; i++) {
+ mTabs.get(i).setPosition(i);
}
}
@Override
public void addTab(Tab tab) {
- mActionView.addTab(tab);
- configureTab(tab, mTabs.size());
+ addTab(tab, mTabs.isEmpty());
}
@Override
public void addTab(Tab tab, int position) {
- mActionView.addTab(tab, position);
+ addTab(tab, position, mTabs.isEmpty());
+ }
+
+ @Override
+ public void addTab(Tab tab, boolean setSelected) {
+ mActionView.addTab(tab, setSelected);
+ configureTab(tab, mTabs.size());
+ if (setSelected) {
+ selectTab(tab);
+ }
+ }
+
+ @Override
+ public void addTab(Tab tab, int position, boolean setSelected) {
+ mActionView.addTab(tab, position, setSelected);
configureTab(tab, position);
+ if (setSelected) {
+ selectTab(tab);
+ }
}
@Override