Android使用TabHost實現在首頁tab再次點選首頁tab時,重新整理首頁資料或者recyclerView回到頂部的需求
阿新 • • 發佈:2019-02-14
類似今日頭條,實現這麼一個需求:“在首頁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的繫結與解綁~