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で何かを行った場合、MainActivityはIntent(http://developer.android.com/reference/android/content/Intent.html)を使用する必要があります。最初に再開し、この後にのみUIで何かを実行できます。

    この場合、インテントにいくつかの追加を追加する必要がある場合があります。これは、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. 独自の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. OtherActivityMainActivityインスタンスを取得します。

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 に答える