gpt4 book ai didi

Android:为什么在创建选项卡时调用 onTabSelected?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:49:34 25 4
gpt4 key购买 nike

当操作栏有选项卡时,我注意到当 Activity 加载到屏幕上时会调用 onTabSelected。每当发生方向更改时,它也会被调用。我的代码根据所选择的选项卡查询数据库,并将查询结果显示到加载的布局。

我的问题是在保存选项卡状态时,当前选定的选项卡为 1 或更高,在恢复状态时,由于默认情况下在 0 选项卡上调用 onTabSelected,因此当恢复状态选项卡为 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);
}

<罢工>增加的并发症:当当前选中的tab为0,方向改变时,onTabSelected还是被调用了两次!一次是最初创建选项卡时,第二次是 onRestoreState 恢复保存的选项卡选择状态,即使它是 0。

我本来以为onTabSelected被调用了两次,但是我错了。这是我的 fragment onCreateView 被调用了两次, fragment 事务中的一些错误在方向改变时添加了相同的 fragment 两次。 onTabSelected被调用一次,恢复状态调用onTabReselected在恢复的tab也为0时也被调用。


搜索 SO 和谷歌后,我发现这个问题有类似的问题原因。 Creating ActionBar tab also calling its selectTab functions

最佳答案

因此,在查看 Google Android 站点上关于 ActionBar 的引用文档后,addTab 方法是默认负责调用 onTabSelected 的方法。

public abstract void addTab (ActionBar.Tab tab)

添加用于选项卡式导航模式的选项卡。该选项卡将添加到列表的末尾。如果这是要添加的第一个选项卡,它将成为选定的选项卡。

参数
tab 要添加的标签

顺便提一下,存在其他不调用 onTabSelected 的重载方法。

public abstract void addTab (ActionBar.Tab tab, boolean setSelected)

所以我改用这些替代方法并解决了问题。但是,一旦显示选项卡,第一个选项卡可能会显示为已选中,但实际上并未选中。单击它会调用 onTabSelected 而不是 onTabReselected。

关于Android:为什么在创建选项卡时调用 onTabSelected?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25577831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com