我在教程的帮助下开发了一个简单的tabwidget。它看起来像这样:
我的目标是:当用户点击“日期标签”并点击“今日标签”时,今日标签必须将今日活动的控制权转回日活动,以显示当天的日期。
例如。如果我在日期选项卡中,则单击今天选项卡。 “今日”选项卡的功能是在日期选项卡中显示当前日期。这适用于“月”和“周”选项卡。这意味着如果用户有月标签处于活动状态,然后点击今日标签:今日标签必须显示同一活动中的当前月份。
数据流:月活动 - >今天的活动 - >月活动
我该如何完成这项任务?
我试图用简单的话说,如果你不明白请告诉我。我会重新解释这个问题。
以下是我用来设置标签的代码
public class Secondactivity extends TabActivity {
private TabHost mTabHost;
private void setupTabHost() {
mTabHost = getTabHost();
}
setupTabHost();
mTabHost.getTabWidget().setDividerDrawable(se.copernicus.activity.R.drawable.tab_divider);
setupTab(new TextView(this), getString(R.string.month));
setupTab(new TextView(this), getString(R.string.week));
setupTab(new TextView(this), getString(R.string.day));
setupTab(new TextView(this), getString(R.string.today));
mTabHost.setCurrentTabByTag(getString(R.string.month));
private void setupTab(final View view, final String tag)
{
View tabview = createTabView(mTabHost.getContext(), tag);
if (tag.compareTo(getString(R.string.month)) == 0)
{
Intent intent = new Intent(getApplicationContext(), MonthActivity.class);
TabSpec setContent = mTabHost.newTabSpec(getString(R.string.month)).setIndicator(tabview).setContent(new TabHost.TabContentFactory()
{
public View createTabContent(String tag)
{
return view;
}
});
setContent.setContent(intent);
mTabHost.addTab(setContent);
}
if (tag.compareTo(getString(R.string.week)) == 0)
{
Intent intent = new Intent(getApplicationContext(), WeekActivity.class);
TabSpec setContent = mTabHost.newTabSpec(getString(R.string.week)).setIndicator(tabview).setContent(new TabHost.TabContentFactory()
{
public View createTabContent(String tag)
{
return view;
}
});
setContent.setContent(intent);
mTabHost.addTab(setContent);
}
if (tag.compareTo(getString(R.string.day)) == 0)
{
Intent intent = new Intent(getApplicationContext(), DayActivity.class);
TabSpec setContent = mTabHost.newTabSpec(getString(R.string.day)).setIndicator(tabview).setContent(new TabHost.TabContentFactory()
{
public View createTabContent(String tag)
{
return view;
}
});
setContent.setContent(intent);
mTabHost.addTab(setContent);
}
if (tag.compareTo(getString(R.string.today)) == 0)
{
Intent intent = new Intent(getApplicationContext(), DayActivity.class);
TabSpec setContent = mTabHost.newTabSpec(getString(R.string.today)).setIndicator(tabview).setContent(new TabHost.TabContentFactory()
{
public View createTabContent(String tag)
{
return view;
}
});
setContent.setContent(intent);
mTabHost.addTab(setContent);
}
}
private static View createTabView(final Context context, final String text)
{
View view = LayoutInflater.from(context).inflate(R.layout.tabs_bg, null);
TextView tv = (TextView) view.findViewById(R.id.tabsText);
tv.setText(text);
return view;
}
答案 0 :(得分:3)
覆盖onTabChange()
,它会告诉您有关实施标签的信息。和下一个标签号。
if(nextTab == DayTab)
比较currentTab并按顺序将标志传递给day Tab。
我不确定您是否可以使用意图绑定详细信息,如果是这样,请使用应用程序级别数据共享,如Application
类实现或单个对象。
答案 1 :(得分:2)
尝试覆盖onTabChanged()
并传递你的意图或在那里设置你的旗帜。这可能会有所帮助:
@Override
public void onTabChanged(String tabId) {
switch (tabId)) {
case 0:
// Tab 1
break;
case 1:
// Tab 2
break;
case 2:
// Tab 3
break;
case 3:
// Tab 4
break;
}
}