【发布时间】:2014-08-30 00:21:18
【问题描述】:
当操作栏有选项卡时,我注意到当活动加载到屏幕上时会调用 onTabSelected。每当发生方向变化时,它也会被调用。我的代码根据选择的选项卡查询数据库,并将查询结果显示到加载的布局中。
我的问题是保存标签状态时,当前选中的标签为1或更高,在恢复状态时,由于onTabSelected默认在0标签上调用,当恢复状态标签为1或更高时会再次调用。这使得选项卡 0 上的数据库查询毫无用处。
如何配置在创建选项卡时不调用 onTabSelected 的 android,或者至少检测到此调用是默认调用而不是用户触发的?
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
int tabPos = tab.getPosition();
switch(tabPos) {
case 0:
// query database and display result
break;
case 1:
// a different query and display result
break;
case 2: ...
}
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
if(savedInstanceState.containsKey(STATE_SELECTED_TAB)) {
getActionBar().setSelectedNavigationItem(savedInstanceState.getInt(STATE_SELECTED_TAB));
}
super.onRestoreInstanceState(savedInstanceState);
}
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putInt(STATE_SELECTED_TAB, getActionBar().getSelectedNavigationIndex());
super.onSaveInstanceState(outState);
}
增加了复杂性: 当当前选中的选项卡为0,方向发生变化时,仍然会调用两次onTabSelected!一次是在最初创建选项卡时,第二次当 onRestoreState 恢复保存的选项卡选择状态时,即使它是 0。
我原本以为 onTabSelected 被调用了两次,但我错了。这是我的片段 onCreateView 被调用了两次,片段事务中的一些错误在方向更改时两次添加了相同的片段。 onTabSelected 被调用一次,恢复状态调用 onTabReselected 在恢复的 tab 也是 0 时也会被调用。
在搜索 SO 和谷歌之后,我发现这个问题有类似的问题原因。 Creating ActionBar tab also calling its selectTab functions
【问题讨论】:
标签: android android-activity tabs