假设我有两个活动,我想从一个跳到另一个。我可以用两种方式做到这一点:
1)直接,简单的通过 2)按下主要活动中的按钮
两种情况的区别在于我放置intent
定义。在第一种情况下,onCreate方法中的任何位置;在第二种情况下,在onClickListener回调中。这两种情况的代码简单如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btnStart = (Button) findViewById(R.id.btnDisplay);
/* Intent intent = new Intent(MainActivity.this, DrawingActivity.class);
startActivity(intent);
finish();*/
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, DrawingActivity.class);
startActivity(intent);
finish();
}
});
}
}
对我而言,两种情况都没有实质性差异。但是,当我从按钮开始第二个活动时,我的应用程序总是崩溃(检查logcat,似乎我用来绘制相机预览的表面纹理中有一个nullpointer)。如果我使用第一种方法启动第二个活动,一切正常,告诉我第二个活动没问题,问题在于我定义意图的方式。
有什么区别?为什么当我在按钮内调用第二个活动时,我的应用程序崩溃,如果我直接调用它,这种情况就不会发生?
希望我能解释自己,
感谢
答案 0 :(得分:0)
在活动上调用finish()
时,执行方法onDestroy()
此方法可以执行以下操作:
关闭所有打开的搜索对话框
用此更新您的信息:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btnStart = (Button) findViewById(R.id.btnDisplay);
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, DrawingActivity.class);
startActivity(intent);
// no use of finish(); here
}
});
}