Android使用TabHost实现在首页tab再次点击首页tab时,刷新首页数据或者recyclerView回到顶部的需求

类似今日头条,实现这么一个需求:“在首页tab时再次点击首页tab,首页列表刷新数据或者列表回到顶部,而从其他tab切换过来时不需要首页刷新数据或者列表回到顶部”。

1,监听tab切换

private String texts[] = {"首页", "发现","频道", "我的"};
tabhost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
    @Override
    public void onTabChanged(String tabId) {
        for (int i = 0; i < texts.length; i++){
            if (tabId.equals(texts[i])){
                previous = current;
                current = i;
                break;
            }
        }
    }
});

2,首页tab的监听事件

tabhost.getTabWidget().getChildAt(0).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
       
        tabhost.setCurrentTab(0);
    }
});

3,设置一个flag,目的是从其他tab切换过来再点击首页tab时,不需要刷新首页列表数据;在首页tab再次点击首页tab时,刷新列表数据或者让列表回到顶部。

private boolean currentFlag = false;
tabhost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
    @Override
    public void onTabChanged(String tabId) {
        for (int i = 0; i <texts.length; i++){
            if (tabId.equals(texts[i])){
                current = i;
                if(current == 0){
                    currentFlag = false;
                }
                break;
            }
        }
    }
});
/**
 * 在首页tab再次点击首页tab时列表回到顶部
 */
    tabhost.getTabWidget().getChildAt(0).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(current == 0 && currentFlag){
                EventBus.getDefault().post("scollTop");
            }
            tabhost.setCurrentTab(0);
            currentFlag = true;
        }
    });

/**
 * tab首页再次点击时回到顶部
 * @param flag
 */
@Subscribe
public void helloEventBus(String flag){
    if(!StringUtils.isEmail(flag) && StringUtils.isEqual("scollTop",flag)){
        recyclerView.scrollToPosition(0);
    }
}
最后判断:在首页再次点击首页tab时,通知fragment中recyclerView滑动最顶部;别忘了EventBus的绑定与解绑~

猜你喜欢

转载自blog.csdn.net/lilihong0/article/details/79525580