Android:重复活动onBackPressed()

时间:2016-12-21 13:19:06

标签: android

我只是想口头解释我现在遇到的麻烦,而不是显示整个代码,因为我觉得你可能更容易找出问题所在。

我从活动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 具有预配置状态。

以下是活动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());
  }
}

4 个答案:

答案 0 :(得分:1)

在从Activity A传递intent时,在intent中添加此标志。它将清除后栈

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

答案 1 :(得分:0)

你必须在活动B中做这样的事情

    Intent intent = new Intent();
    setResult(RESULT_OK, intent);
    finish();

试试这个。因为您在活动B onBackPressed()中再次启动一项活动,所以请删除该代码并将上面的代码添加到您的代码中。

答案 2 :(得分:0)

如果您正在尝试使用startActivityForResult和onActivityResult,那么根据我的理解,您会犯一些错误。首先,当你开始B活动时,你应该这样做:

 startActivityForResult(intentB,1);

进入B活动后,执行代码逻辑,当您准备好回到之前的活动时(在这种情况下使用后退),您应该执行以下操作:

@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
         }
     }
}

答案 3 :(得分:0)

如果您没有正确A活动,可能会发生这种情况。

如果您希望{1}}不再像音乐播放器应用中那样终止,则可以使用finish()属性进行活动,如下所示:

Activity A

这是因为允许android:launchMode=singleTask的活动在您的应用中只有一个实例。

如果您想将Intent发送到现有<activity android:name=".ActivityA" android:label="ActivityA" android:launchMode="singleTask"> ,则需要通过覆盖android:launchMode=singleTask中的onNewIntent()来捕获意图。