在我的应用程序中,主要活动托管两个片段并作为 ActionBarTabs 附加到活动。使用以下代码。注意:活动和 2 个片段在单独的 xml 布局文件中定义(见底部图片)
private void createActionTabs() {
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
//Status Tab
String strStatus = getResources().getString(R.string.lblStatus);
ActionBar.Tab statusTab = actionBar.newTab();
statusTab.setText(strStatus);
TabListener<SFrag> sFTabListener = new TabListener<SFrag>(this, strStatus, SFrag.class);
statusTab.setTabListener(sFTabListener);
actionBar.addTab(statusTab);
//Controller Tab attached the same way
.....
}
ActionBar 项目(开始和刷新)是使用添加的
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return true;
}
现在来解决我的问题:
我想在应用程序加载、片段恢复和单击操作栏中的刷新菜单项时更新状态片段上显示的数据。现在,当我尝试使用以下代码从 Main Activity 访问状态片段时
SFrag frag = (SFrag) getFragmentManager().findFragmentById(R.id.st_frag); Log.d(TAG, "In Activity SFrag is " + (frag == null ? "null" : "not null")); if (frag != null) { //calls the method to update data fragment.updateStatusData(statusInformation); }
getFragmentManager ().findFragmentById方法总是返回 null。我什至尝试了活动的onResume方法,片段对象仍然返回为null。那么我如何访问片段,从而从主机操作中访问该片段的方法。
其次,我正在尝试在操作栏中使用 action_service(仅针对此模型显示为“开始”按钮)作为切换或停止后台服务的开关。我可以从onOptionsItemSelected方法轻松更新开始菜单项的标题/图标(我将当前状态运行/停止保存在共享首选项中)。但是当我尝试通过使用在活动的 onStart/onResume 访问 menuItem
MenuItem mi = (MenuItem) findViewById (R.id.action_service);
它总是返回 null。那么如何访问 onResume/onStart 中的 action_service 菜单项来更新它。
我的应用程序看起来像这样