1

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

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

5 回答 5

3

这取决于。

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

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

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

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

于 2012-08-30T17:48:45.593 回答
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();
    }
}
于 2012-08-30T17:53:28.973 回答
1

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

有时你不能将方法设为静态,因为它依赖于 MainActivity 中的所有其他状态。将所有依赖状态设为静态无异于将所有内容都设为全局,这不是一个好主意。

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

这是你要做的:

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

  1. 创建您自己的应用程序子类:

    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 实例。

private MainActivity mainActivity;

   @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        MyApplication ma = (MyApplication)getApplication();
        mainActivity = ma.mainActivity;
        ...
  1. 利用 mainActivity 实例调用方法:

mainActivity.someMethodOnMainActivtiy();

于 2016-01-23T00:47:03.603 回答
0

将 myMethod() 声明为静态的。

public static void myMethod()
{
...
}

在你的应用程序的任何地方调用它MainActivity.myMethod();

于 2012-08-30T17:50:37.570 回答
0

如果您要从任何活动中调用静态方法,则应该有一个实用程序或帮助程序类,您可以在其中从任何地方静态调用这些方法

这是帮助程序类的示例

   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*/

}
于 2012-08-30T18:54:10.157 回答