当操作栏有选项卡时,我注意到onTabSelected在屏幕上显示活动时调用。每当方向发生变化时也会调用它。我的代码根据所选的标签查询数据库,并将查询结果显示到加载的布局。Android:为什么在创建标签时调用onTabSelected?
我的问题是在还原状态下保存标签状态并且当前选定标签为1或更高时,因为ontab选择在0选项卡上默认调用,当恢复状态标签为1或更高时它将被再次调用。这使得选项卡0上的数据库查询无用。
如何配置Android的onTabSelected没有调用制表符或至少检测到这个调用是默认的,而不是用户触发?
@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被称为太当恢复选项卡也为0。
SO冲刷和谷歌,我发现这个问题,有问题类似的原因之后。 Creating ActionBar tab also calling its selectTab functions
我改变标签3的配置,它调用tab1然后tab3 !!! – mmlooloo 2014-08-30 10:21:02
它的工作原理很明显,我们必须在ActionBar(创建阶段)中只设置一个选项卡。 onTabSelected将在setSelected设置为true的每个选项卡上触发。 – 2015-07-07 16:53:23