JavaクラスのクラッシュでstartActivity

スティーブ:

私は学校のプロジェクトのためのAndroidアプリを開発していると私は、次のような問題があります。私が持っているMainActivityButtonしてSecondActivity私はボタンをクリックするとMainActivity、それは開く必要がありますSecondActivity私は私の二つのデバイス(サムスンギャラクシーS9 +とASUS zenfone2)でそれをテストしました:

MainActivity.java

public class MainActivity extends AppCompatActivity {
    Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button=(Button)findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MainActivity.this,SecondActivity.class)
                startActivity(intent);
            }
        });
}
}

これは、両方のデバイス上で正常に動作しますし、私はボタンをクリックすると、正しくSecondActivityを開きます。

私は、コントローラクラスを追加して起動しようとすると問題があるSecondActivityことに。これは、コントローラクラスです。

Controller.java

public class Controller {
    public void open(Context cont){
        Intent intent=new Intent(cont,SecondActivity.class);
        cont.getApplicationContext().startActivity(intent);
     }
  }

そして、私は変更MainActivityをこのように:

public class MainActivity extends AppCompatActivity {
    Button button;
    Controller c;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button=(Button)findViewById(R.id.button2);
        c=new Controller();

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                c.open(getApplicationContext());
            }
        });
}
}

私はボタンをクリックしたときに私のzenfone2クラッシュの間、これは、私のS9 +上の罰金を動作します。問題はどこにありますか?それが正しいはない場合、なぜS9 +で動作しますか?

ありがとうございました

MidasLefko:

あなたはIntent.FLAG_ACTIVITY_NEW_TASKフラグを追加しない限り、AndroidのPのとして、あなたは、アプリケーションコンテキストで活動を開始することはできません。だから代わりにmainactivityコンテキストを使用するように、コントローラとmainactivityを変更。

c.open(MainActivity.this);

public void open(Context context) {
    Intent intent = new Intent(context, SecondActivity.class);
    context.startActivity(intent);
}

若しくは

public void open(Context context) {
    Intent intent = new Intent(context.getApplicationContext(), SecondActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=205179&siteId=1