猿问

java类崩溃中的startActivity

我正在为学校项目开发 Android 应用程序,但遇到以下问题。我有MainActivity一个Button和SecondActivity。当我单击 中的按钮时,MainActivity它必须打开SecondActivity. 我在我的两台设备(三星 Galaxy s9+ 和华硕 zenfone2)上进行了测试:


主活动.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时。这是控制器类:


控制器.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());

            }

        });

}

}

这在我的 s9+ 上运行良好,而在我的 zenfone2 上单击按钮时崩溃。问题出在哪儿?如果不正确,为什么在 s9+ 上有效?


红糖糍粑
浏览 164回答 3
3回答

波斯汪

从 Android P 开始,除非您添加 Intent.FLAG_ACTIVITY_NEW_TASK 标志,否则您无法使用应用程序上下文启动活动。因此,只需更改您的控制器和 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);}

桃花长相依

getApplicationContext()在 open 函数中从 Controller 类中删除。做了cont.startActivity(intent);

慕虎7371278

你不能调用startActivity从getApplicationContext了,你不需要调用它这么多次。getApplicationContext用“这个”代替。button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                c.open(MainActivity.class);            }        });然后只需调用 startActivitypublic class Controller {    public void open(Context cont){        Intent intent=new Intent(cont,SecondActivity.class);        cont.startActivity(intent);     }  }
随时随地看视频慕课网APP

相关分类

Java
我要回答