私のアプリケーションでは、メイン アクティビティは 2 つのフラグメントをホストし、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 から Status フラグメントにアクセスしようとすると
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 メニュー項目にアクセスして更新するにはどうすればよいでしょうか。
私のアプリケーションは次のようになります