0

假设我有多个正在运行的活动;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
  }
}

这可能吗?我知道这个问题可能听起来令人困惑,所以请提出问题,我也许可以再次简化它。

4

1 回答 1

1

不不不不不。这就像将撬棍拉到 Android 上然后将其粉碎。活动并不意味着通过new.

如果您想要的只是不同活动在其 onOptionsItemSelected() 中调用的方法之间存在一些共享行为,那么要么创建一个超级活动并调用超级活动,然后再在特定子类中添加您想要的任何行为,或者创建所有活动都可以访问的函数,该函数包含不变的内容,然后在子类中添加发生变化的内容。无论哪种方式,Activity 都意味着通过在 startActivity 等中提供对类的引用来运行。您不能将 Activity 视为普通的 java 对象(即使它最终是),因为它的生命周期由系统。

于 2012-11-27T23:11:43.673 回答