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

时间:2012-08-30 17:36:15

标签: java android methods android-activity static-methods

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

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?
    }
}

5 个答案:

答案 0 :(得分:3)

取决于。

  1. 如果您只想使用某些共享功能(例如执行某些计算的代码),则会出现这种情况。

    我建议将此共享功能移至某个独立类并从那里调用它。

  2. 如果您想调用MainActivity,MainActivity会对MainActivity UI执行某些操作,则必须使用Intent(http://developer.android.com/reference/android/content/Intent.html),因为MainActivity应该首先恢复,并且只有在此之后它才能恢复用UI做点什么。

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

答案 1 :(得分:2)

将其设为static,传入activity,实例化,还是更好地重新思考设计方法?我认为您不应该在activity的其他main 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();
    }
}

答案 2 :(得分:1)

如何从另一项活动中调用MainActivity中的方法已解决

有时您无法使该方法保持静态,因为它取决于MainActivity中的所有其他状态。使所有依赖状态也是静态的,等于只使一切全局,这不是一个好主意。

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

这是你做的事情:

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

  1. 创建自己的Application子类:

    public class MyApplication extends Application { MainActivity mainActivity; }

  2. 调整清单:

    <application android:name=".MyApplication" ...

  3. 在MainApplication初始化MyApplication.mainActivity

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

  4. OtherActivity中检索MainActivity实例。

  5. private MainActivity mainActivity;

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

答案 3 :(得分:0)

将myMethod()声明为静态。

public static void myMethod()
{
...
}

通过 MainActivity.myMethod();

在应用中的任意位置调用它

答案 4 :(得分:0)

如果您要从任何活动中调用静态方法,您应该有一个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*/

}