类似今日头条,实现这么一个需求:“在首页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的绑定与解绑~