如何在单击窗口小部件按钮时调用另一个活动中定义的“方法”?

时间:2014-10-17 12:06:02

标签: android android-widget

我知道如何使用待定意图启动单击窗口小部件按钮的活动,但我想启动该活动的特定方法。

2 个答案:

答案 0 :(得分:6)

如果您需要在其他活动中调用某个方法,那么您的设计错误。您不应该仅将所有代码都放在活动中。

为什么选择不好 -
因为您需要类的对象来调用它的方法。你怎么会得到活动的对象?除非你将一个活动的对象存储到另一个活动中(这是一件非常混乱的事情)。这种方法的另一个问题是你的其他活动可能已经被破坏了,所以如果你依赖于另一个活动的某些UI元素,那么你根本就没有任何帮助。使活动保持静止将为您打开一大堆蠕虫。

那么可用的选项是什么 -
有很多可用于进行交互活动方法调用的选项,但我依赖于Singletons。它们是只能有一个对象的类,这些对象将被静态访问,因此您不必存储类的对象,因为类本身存储对象。它可以如下所示 -

public class AppManager{
  private static AppManager _instance = null;
  public static AppManager getInstance(){
    if(_instance == null)
      _instance= new AppManager();
    return _instance;
  }
  private AppManager(){} //Making the constructor private, so no 2 object can be created
  public void someMethod(){}
}

因此,要从项目的任何位置拨打someMethod(),您只需拨打电话

AppManager.getInstance().someMethod();

所有你的计算都在里面。您可以将当前活动的对象存储在Manager类中,也可以完全从Activity中抽象出功能,并可以更好地控制代码。当然,你可以拥有一个以上的单身人士课程。在我的项目中,我通常有近6-7名单身经理来处理不同的任务。

答案 1 :(得分:3)

您需要在2个不同的活动中使用相同的方法。 因此,最好使用该方法获取另一个类,然后在两个活动中调用该方法。

public class A extends Activity 
{  

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main2);

    }      

    B.method() 
}

public class B {

    public static void method()
    {

    }  

}

public class C extends Activity 
{  

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main2);

        B.method();

    }
}