【发布时间】:2014-04-09 20:33:50
【问题描述】:
我有一个包含 FragmentTabHost 的片段。我在这里设置:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_settings_organization, container, false);
Log.v(TabHome.TAG, "SettingsOrganization onCreateView()");
setUpActionBar();
TextView headerView =(TextView) v.findViewById(R.id.orgNameHeader);
headerView.setText(organization.name);
// showSpinner(true);
mTabHost = (FragmentTabHost) v.findViewById(android.R.id.tabhost);
mTabHost.setup(activity, this.getChildFragmentManager(), R.id.realtabcontent);
mTabHost.setVisibility(View.INVISIBLE);
mTabHost.addTab(
mTabHost.newTabSpec("text")
.setIndicator(getString(R.string.settings_text_select), activity.getResources().getDrawable(R.drawable.ic_home)),
SettingsOrganizationTabFragment_.class, null
);
mTabHost.addTab(
mTabHost.newTabSpec("voice")
.setIndicator(getString(R.string.settings_voice_select), activity.getResources().getDrawable(R.drawable.ic_home)),
SettingsOrganizationTabFragment_.class, null
);
mTabHost.addTab(
mTabHost.newTabSpec("app")
.setIndicator(getString(R.string.settings_app_select), activity.getResources().getDrawable(R.drawable.ic_home)),
SettingsOrganizationTabFragment_.class, null
);
restClient = new RestClient_();
SettingsOrganizationErrorHandler errorHandler = new SettingsOrganizationErrorHandler();
restClient.setRestErrorHandler(errorHandler);
RestTemplate restTemplate = restClient.getRestTemplate();
ClientHttpRequestFactory factory = RestClientHelper.clientHttpRequestFactory();
restTemplate.setRequestFactory(factory);
RestClientHelper.prepareRestClient(restClient);
restClient.setHeader("Auth-Token",TabHome.authToken);
GetSettingsTask task = new GetSettingsTask();
task.execute();
if (savedInstanceState != null) {
mTabHost.setCurrentTabByTag(savedInstanceState.getString("text"));
}
return v;
}
您还可以在这里看到我启动了一个后台任务来获取一些数据。完成后,我需要更新所有三个选项卡。问题是只存在第一个选项卡;其他为空。
我也尝试更新 onTabChanged() 中的其他选项卡,但在这种情况下,当 frag 不是第一个选项卡时,它为 null:
mTabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
Log.v(TabHome.TAG,"Tab ID:"+ tabId);
SettingsOrganizationTabFragment frag = (SettingsOrganizationTabFragment)thisFrag.getChildFragmentManager().findFragmentByTag(tabId);
if (tabId.equalsIgnoreCase("text")){
frag.notificationType=SettingsOrganizationTabFragment.NOTIFICATION_TYPE_TEXT;
frag.settings =settings;
frag.updateView();
}
if(tabId.equalsIgnoreCase("voice")){
frag.notificationType=SettingsOrganizationTabFragment.NOTIFICATION_TYPE_VOICE;
frag.settings =settings;
frag.updateView();
}
if(tabId.equalsIgnoreCase("app")){
frag.notificationType=SettingsOrganizationTabFragment.NOTIFICATION_TYPE_APP;
frag.settings =settings;
frag.updateView();
}
}
});
(thisFrag指的是包含fragmentTabHost的片段)
即使其他标签尚未显示,我如何更新它们?
谢谢!
【问题讨论】:
标签: android tabs android-tabhost android-tabs fragment-tab-host