我在使用选项卡和 ActionBarSherlock 时遇到了一些麻烦。
基本上,我有一个包含 3 个按钮的菜单,可以加载一个 Activity。此 Activity 是一个 SherlockListActivity 并具有 3 个选项卡,将根据菜单中的哪个项目用于启动 Activity 来选择它们。
我遇到的问题是,当我通过菜单加载第一个选项卡,返回菜单并从菜单加载第三个选项卡时,它将显示第一个选项卡为选中状态 - 然后加载第三个选项卡.
以下是关于我的实现的一些细节:
活动是:
public class MyActivity extends SherlockListActivity implements ActionBar.TabListener
在 onCreate 中调用以下内容来设置全局 String 命名模式:
String dToken = null;
Bundle extras = getIntent().getExtras();
if (extras != null) {
dToken = extras.getString("value");
}
mode = dToken;
ABS 和选项卡在 onCreate 中使用以下内容进行初始化:
ActionBar ab = getSupportActionBar();
ab.setDisplayHomeAsUpEnabled(true);
//Sets the ActionBarSherlock Tabs
getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ActionBar.Tab leftTab = getSupportActionBar().newTab();
leftTab.setText("First");
leftTab.setTabListener(this);
ActionBar.Tab midTab = getSupportActionBar().newTab();
midTab.setText("Second");
midTab.setTabListener(this);
ActionBar.Tab rightTab = getSupportActionBar().newTab();
rightTab.setText("Third");
rightTab.setTabListener(this);
现在设置选择哪个选项卡(使用从上面的第二个代码块获得的模式变量),这是在 onCreate 的末尾:
if (mode.equals("first"))
ab.addTab(leftTab, true);
else ab.addTab(leftTab, false);
if (mode.equals("second"))
ab.addTab(midTab, true);
else ab.addTab(midTab, false);
if (mode.equals("third"))
ab.addTab(rightTab, true);
else ab.addTab(rightTab, false);
因此,假设在菜单中,我单击第一个菜单项。它将加载第一个选项卡的结果。我返回菜单并单击第三个菜单项,它将加载第一个选项卡的结果几秒钟,然后切换到第三个选项卡的结果。
当每个菜单项加载单独的活动时,这不是问题,但我将它们全部合并,因为三个活动之间的代码几乎相同。
每当使用后退按钮时,我都会尝试调用 this.finish 之类的方法,以便我可以清除活动,但这不起作用。