BottomBar 设置默认选中及手动选择tab

两个问题及解决方案

1.设置默认选中
2.某些情况下的手动设置选中

设置默认选中

最近项目中用到了bottombar作为底部导航栏来替代之前的radiogroup来控制页面的跳转,在进入程序时时,设置默认的首页面可以用:

bottomBar.selectTabWithId(id);

某些情况下的手动设置选中

在这里插入图片描述
但是我现在有个需求,如图,点击第一个tab和第三个tab都是切换fragment,点击第二个tab则是跳转到一个新的activity,奇怪的事情这就发生了。
当我在第一个页面点击第二个tab的时候,跳转到一个新的activity,我在新的activity再次返回到首页,这时首页加载的还是第一个fragment,但是下面的tab选中的还是第二个!这是不是极其不合理!
在查阅api并且百度之后,发现一个回调方法:

@Override
public boolean shouldInterceptTabSelection(int oldTabId, int newTabId) 

其中有两个参数,字面意思,第一个参数是在点击当前tab时的上一个tab的id,只要我们在点击第二个tab的时候,手动调用

bottomBar.selectTabWithId(oldTabId)

方法让它选中不就行了。

 @Override
 public boolean shouldInterceptTabSelection(int oldTabId, int newTabId) {
        switch (newTabId) {
            case R.id.tab_1:
                return false;
            case R.id.tab_2:
                Intent intent = new Intent(mContext, TestActivity.class);
                startActivity(intent);
                bottomBar.selectTabWithId(oldTabId);
                return false;
            case R.id.tab_3:
             
                return false;
            default:
                return false;
        }

等等,事情好像并没有那么简单。
我这么设置之后,选项卡应该是选择到了tab1,但是,然而并没有!
为什么呢?

经过测试(源码还没时间看,以下仅为猜测),tab选中的事件在响应跳转(点击)之后,即我们虽然设置tab1为选中,但是紧接着系统又将事件分发下去,将tab2设置为选中,所以就出现了上述的情况。

问题找到了,下面是我的解决方案:
首先在shouldInterceptTabSelection回调中将oldTabId记录下来

@Override
    public boolean shouldInterceptTabSelection(int oldTabId, int newTabId) {
        switch (newTabId) {
            case R.id.tab_1:
                return false;
            case R.id.tab_2:
                Intent intent = new Intent(mContext, TestActivity.class);
                startActivity(intent);
                this.oldTabId = oldTabId;
                return false;
            case R.id.tab_3:
                
                return false;
            default:
                return false;
        }
    }

然后在activity的生命周期onStart中再将oldTabId设置回来

@Override
    protected void onRestart() {
        super.onRestart();
        if (oldTabId != 0) {
            bottomBar.selectTabWithId(oldTabId);
        }
    }

至此,问题解决。

结语

如果哪里有误还烦请指正呀
点击这里获取找到我,获取更多哦

QQ群:

image.png

微信公众号

分享小知识,记录你的小故事呀
微信公众号.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值