0

MainActivity から SubActivity を呼び出しており、その SubActivity で MainActivity のメソッドを呼び出す必要があります。を使用してそれを行う場合

MainActivity test = new MainActivity();
...
test.method("test");

「アクティビティを開始できません」NullPointerException という致命的な例外が発生します。

私も試しMainActivity.method("test")ましたが、それもうまくいきません。MainActivity の変数を変更すると、MainActivity.booleanVariable = true;

NullPointerException の原因は何ですか? 私は今、あまりにも盲目である基本的な何かを見逃していますか?

4

2 に答える 2

2

Activityこのようなインスタンスを作成しないでください

MainActivity test = new MainActivity();

Intentを呼び出すにはan を使用しますActivity。今...

MainActivity から SubActivity を呼び出しており、その SubActivity で MainActivity のメソッドを呼び出す必要があります。

それがサブなら、それはActivityそれを意味しextends MainActivityます。この場合、次のようなことができます

@Override
public returnType myMethod(params)  // where returnType is int, boolean, void etc...
                                    // and params are parameters the method takes (if any)
{
    super.myMethod(params);
    // other code if needed
}

Activityサブスクライブがそうでない場合は、なぜこれを行う必要があるextends MainActivityのか​​を詳しく説明してください。より良い方法を見つけるお手伝いをします.

編集

上記のあなたのコメント (「... MainActivity の onActivityResult でそれをキャッチする」) を読むと、どのように機能するのか混乱していると思いますstartActivityForResult()。最初は難しいかもしれません。電話すれば

Intent i = new Intent(SecondActivity.this, FirstActivity.class);
// put extras if needed
starActivityForResult(i);

あなたの秒では、あなたの秒ActivityonActivityResult()も行きますActivityFirstActivityそこに電話するとそこから呼ばれますsetResult()

于 2013-10-28T22:17:43.923 に答える
0

(例)のMainActivityonCreate

SecondActivity second = new SecondActivity();
second.test("Hello second");

SecondActivityで:

class SecondActivity extends Activity
{
   public static void test(String term)
   {
      Log.d("SecondActivity",term);
   }
}

しかし!

実際のプロジェクトでは、このアプローチを控えることを強くお勧めします。そしてテストのために - します。

最善の方法として、インテントを使用するか、コールバックを使用する必要があります(これについては Google で検索してください)。

例 :

class MainActivity extends Activity
{
   public void onCreate(Bundle onSavedInstanceState)
   {
      super.onCreate(onSavedInstanceState);
      Intent intent = new Intent(this,SecondActivity.class);
      intent.putExtra("hi","Hello world!");
      startActivity(intent);
   }
}

class SecondActivity extends Activity
{
   public void onCreate(Bundle onSavedInstanceState)
   {
      super.onCreate(onSavedInstanceState);
      Intent intent = getIntent();
      Bundle temp = getIntent().getBundle();
      Lod.d("SecondActivity",temp.getStringExtra("hi","UNDEFINED") +"");
   }
}

マニフェストで両方のアクティビティを宣言する必要があります。私はあなたに延長の出発点を与えると思います。

于 2013-10-28T22:17:03.433 に答える