1. 程式人生 > >Android使用TabHost實現在首頁tab再次點選首頁tab時,重新整理首頁資料或者recyclerView回到頂部的需求

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的繫結與解綁~