手机界面大小有限,使用TabHost可以达到在一个Activity中放入多个容器(界面)的效果。但存在一个问题是,当数据信息在一个容器(界面)中有所改变时,需要在用户切换选项卡到其他容器(界面)的时候实时刷新数据。
如图,在”发布板报“页面发布新的板报,当用户点击“浏览板报”或者“管理板报”选项卡时要刷新数据——显示出刚刚发布的板报。
解决问题的关键在于对选项卡修改事件的监听,根据Tab ID来调用相应的方法。
核心代码:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ---------------------------Tab布局设置---------------------------------------
final TabHost tabHost = getTabHost();
// 设置使用TabHost布局
LayoutInflater.from(this).inflate(R.layout.highlogined,
tabHost.getTabContentView(), true);
// 添加第一个标签页
tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("浏览板报")
.setContent(R.id.tab01));
// 添加第二个标签页
tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("发布板报")
.setContent(R.id.tab02));
// 添加第三个标签页
tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("管理板报")
.setContent(R.id.tab03));
int width = ; // 设置选项卡的高度和宽度
int height = ;
TabWidget tabWidget = tabHost.getTabWidget();
for (int i = ; i < tabWidget.getChildCount(); i++) {
// 设置高度、宽度,不过宽度由于设置为fill_parent,在此对它没效果
tabWidget.getChildAt(i).getLayoutParams().height = height;
tabWidget.getChildAt(i).getLayoutParams().width = width;
}
// 设置监听器,实现数据实时刷新
tabHost.setOnTabChangedListener(new OnTabChangeListener() {
public void onTabChanged(String tabId) {
if (tabId.equals("tab1")) {
getContents(); // 得到浏览所有板报的方法
} else if (tabId.equals("tab2")) {
} else if (tabId.equals("tab3")) {
lookOwnBoard(); // 得到浏览本人发布得板报的方法
}
}
});
}