如何从其他活动中调用主要活动中的方法?

我想从其他活动中调用主要活动中的公共方法。 我怎样才能做到这一点?

class MainActivity extends Activity { public void myMethod() {} } class MyActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // How can I call myMethod() in MainActivity? } } 

这取决于。

  1. 在这种情况下,如果您只想使用一些共享function(例如执行某些计算的代码)。

    我建议将此共享function移动到某个独立类并从那里调用它。

  2. 如果你想调用MainActivity,那么MainActivity用MainActivity UI做了一些事情,你将不得不使用Intent( http://developer.android.com/reference/android/content/Intent.html ),因为MainActivity应该是首先恢复,只有在此之后它才能用UI做一些事情。

    在这种情况下,您可能需要向intent添加一些额外的额外内容,这将由MainActivity代码(在onCreate或onResume中)解析并调用适当的方法。

使其static ,传递activity ,实例化,或更好地重新思考设计方法? 我不认为你应该在main activity另一个activity调用一个方法 – 创建一个new class可能更好吗?

静态代码:

 class MainActivity extends Activity { public void myMethod() { MyActivity.runMyMethod(); } } class MyActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } public static void runMyMethod() { //Run code... } } 

实例化活动:

 class MainActivity extends Activity { public void myMethod() { MyActivity myActivity = new MyActivity(); myActivity.runMyMethod(); } } class MyActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } public void runMyMethod() { //Run code... } } 

通过活动参考:

 class MainActivity extends Activity { public void onCreate(Bundle savedInstanceState) { OtherActivity otherActivity = new OtherActivity(this); } public void yourMethod() { } } class OtherActivity extends Activity { MainActivity mainRefrence; OtherActivity(MainActivity main) { mainRefrence = main; } public void onCreate() { mainRefrence.yourMethod(); } } 

如何从另一个活动SOLVED中调用MainActivity中的方法

有时您无法使方法成为静态,因为它取决于MainActivity中的所有其他状态。 使所有依赖状态也是静态的,就等于让一切都变得全局化 ,这不是一个好主意。

想要在MainActivity上调用非静态方法也没有错 – 它就像一个类调用另一个类。

这是你做的:

您的应用程序在所有活动中共享(前提是它们都在同一个过程中)。 此应用程序可用于存储状态。 虽然一个明智的想法只是存储你的活动的实例,并让他们存储他们各自的状态,这是我们将要做的。

  1. 创建自己的Application子类:

    public class MyApplication extends Application { MainActivity mainActivity; }

  2. 调整清单:

  3. 在MainApplication中初始化MyApplication.mainActivity

    @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MyApplication ma = (MyApplication)getApplication(); ma.mainActivity = this; ...

  4. OtherActivity检索MainActivity实例。

private MainActivity mainActivity;

  @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MyApplication ma = (MyApplication)getApplication(); mainActivity = ma.mainActivity; ... 
  1. 利用mainActivity实例调用方法:

mainActivity.someMethodOnMainActivtiy();

将myMethod()声明为static。

 public static void myMethod() { ... } 

通过MainActivity.myMethod();在应用程序的任何位置调用它MainActivity.myMethod();

如果您要从任何活动中调用静态方法,那么您应该有一个Utililty或Helper类,您可以从任何地方静态调用这些方法,我认为这不是一个很好的实践,可以将静态方法放在一个活动上。

这是助手类的示例

  public Class ActivityHelper{ public static void myMethod(Context context){ // If you need to do something with your Context } /* and you can create a lot of static methods that you would need to use from any activity or service on your app*/ }