我只是试图口头解释我现在遇到的麻烦,而不是显示整个代码,因为我认为您更容易弄清楚问题是什么。
我以活动a 开始。当我在此处单击按钮b 时,然后移动到活动C 。在此活动中配置了几件事后,我按了后面的按钮,以返回以前的活动a 。
这是活动B 的onBackPressed()
部分。
@Override
public void onBackPressed() {
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
mediaPlayer.stop();
mediaPlayer.release();
}
Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivityForResult(intent, RESULT_OK);
finish();
}
使用该代码,我设法回到了上一个,活动a 。但是,当我在此活动中再次单击"返回"按钮时,我发现自己具有相同的活动a 具有预配置状态的。
这是活动A 的onBackPressed()
。
@Override
public void onBackPressed() {
super.onBackPressed();
turnOffRingtone(RingtoneVolumeControl.PLAYER);
}
private void turnOffRingtone(MediaPlayer ringtone) {
try {
if (ringtone != null) {
ringtone.stop();
ringtone.release();
}
} catch(IllegalStateException e) {
Log.i(ApplicationManager.LOG, e.getMessage());
}
}
通过活动的意图。
intent.addflags(intent.flag_activity_clear_top | intent.flag_activity_new_task);
如果您试图与StartactivityForresult和OnActivityResult一起工作,您会从我的理解中做错了几件事。首先,当您启动B活动时,您应该使用:
startActivityForResult(intentB,1);
进行B活动后,进行代码逻辑,当您准备返回以前的活动(在这种情况下使用Backed)时,您应该做以下操作:
@Override
public void onBackPressed() {
if(mediaPlayer != null && mediaPlayer.isPlaying()) {
mediaPlayer.stop();
mediaPlayer.release();
}
Intent intent = new Intent();
setResult(RESULT_OK, intent);
finish();
}
现在,回到活动A中,您可以处理活动b
的响应@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if(resultCode == Activity.RESULT_OK){
//Write youy code for your result
}
}
}
您必须在活动B
中做类似的事情 Intent intent = new Intent();
setResult(RESULT_OK, intent);
finish();
尝试这个。因为您将在活动B onbackpresse()中再次启动一项活动
如果您不正确地 finish()
活动,可能会发生这种情况。
如果要像在音乐播放器应用中那样将Activity A
避免终止,则可以使用android:launchMode=singleTask
属性进行此类活动:
<activity
android:name=".ActivityA"
android:label="ActivityA"
android:launchMode="singleTask">
这是因为允许使用android:launchMode=singleTask
的活动在您的应用中只有一个实例。
如果要向现有的Activity A
发送意图,则需要通过在Activity A
中覆盖onNewIntent()
来捕获意图。