假设我有多个正在运行的活动;A、B 和 C。每个都共享一个相似的选项菜单,但在执行方面存在一些差异(活动 A 中的“开始”选项可能与活动 B 中的“开始”选项略有不同)。我还有一个名为“values”的静态类,它与活动 A 相关联。它还具有当前正在运行的活动的上下文。
有时值可能会调用当前运行活动的选项菜单中的项目。我的代码很乱(见下文),所以我想把它组织成更易读的形式。
我的目标是设置值,以便它可以只调用当前正在运行的活动的函数,而不是该活动的选项菜单项。在活动内部,选项菜单中的一项只会调用一个函数而不是其中的代码(出于组织原因)。
这里有一个 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
}
}
这可能吗?我知道这个问题可能听起来令人困惑,所以请提出问题,我也许可以再次简化它。