複数の実行中のアクティビティがあるとしましょう。A、B、および C。それぞれが同様のオプションメニューを共有しますが、実行にいくつかの違いがあります (「開始」オプションは、アクティビティ A と B でわずかに異なる場合があります)。また、アクティビティ A に関連付けられている「values」という静的クラスもあります。これには、現在実行中のアクティビティのコンテキストもあります。
値は、現在実行中のアクティビティの optionsmenu の項目を呼び出す場合があります。私のコードはごちゃごちゃしているので(以下を参照)、より読みやすい形式に整理したいと思います。
私の目標は、そのアクティビティの optionmenu 項目ではなく、現在実行中のアクティビティの関数だけを呼び出せるように値を設定することです。アクティビティ内では、optionsmenu の項目は、内部のコードではなく関数を呼び出すだけです (構成上の理由から)。
現在実行中のアクティビティの optionsmenu の項目を呼び出す values.class のサンプルです。
public void startExample() {
Runnable startRun = new Runnable() {
@Override
public void run() {
handler.post(new Runnable() { // This thread runs in the
// UI
@Override
public void run() {
((Activity) getCurrentContext()).openOptionsMenu();
((Activity) getCurrentContext()).closeOptionsMenu();
((Activity) getCurrentContext()).onOptionsItemSelected(theMenu.findItem(R.id.start));
}
});
}
};
new Thread(startRun).start();
}
ご覧のとおり、values.startExample() は、現在実行中のアクティビティのオプション メニューの開始項目を呼び出します。代わりに、現在実行中のアクティビティに基づいて関数を呼び出すように、これを変更したいと思います。だから、代わりにこういうことができるんじゃないかと思っていたんです。
values.class 内
ActivityB b = new ActivityB
public void startExample() {
Runnable startRun = new Runnable() {
@Override
public void run() {
handler.post(new Runnable() { // This thread runs in the
// UI
@Override
public void run() {
if( ((Activity) getCurrentContext()).getClass().getName().equals("package.ActivityB") ) {
b.start();
}
}
});
}
};
new Thread(startRun).start();
}
アクティビティ B は次のようになります。
public class ActivityB extends Activity {
//class code here
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case start:
this.start();
break;
}
}
public void start() {
//code here
}
}
これは可能ですか?この質問はわかりにくいかもしれませんので、質問してください。もう一度簡単にできるかもしれません。