finishActivity() - 使用确切的请求代码关闭所有活动

时间:2014-03-22 07:58:28

标签: android

我是新手与android但战斗;)我决定写mp3播放器。我的任务有问题。我想从我的文件浏览器中选择一个文件。它实现如下:

A类的活动开始B类的活动。然后几次开始B类活动。每次使用startActivityForResult(intent,REQUEST_CODE)实现它 - 每次请求代码都是相同的。从上一个活动开始,我想回到第一个带有结果的活动。所以我需要关闭目前为止开展的所有活动。因为所有这些都具有相同的REQUEST_CODE,所以我使用了finishActivity(REQUEST_CODE)(在最后一个之前关闭所有)然后结束()(关闭最新的)。结果与finish()相同 - 仅关闭最后一个活动。你能告诉我我的错误在哪里吗?我会非常感激的。这是与问题相关的一些代码。首先,MainActivity.class中的意图是send(在browseFiles方法中)。然后执行FileListActivity.class的代码。下面的FileListActivity.class代码片段就在最后。最后,应该执行MainActivity.class中的onActivityResult。

MainActivity.class

public void browseFiles (View v) throws IOException {
    Intent intent = new Intent(this, FileListActivity.class);
    intent.putExtra(path, "/");
    startActivityForResult(intent, R.integer.REQUEST_CHOOSE_A_SONG);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
    super.onActivityResult(requestCode,resultCode,data);
    switch(requestCode){
        case R.integer.REQUEST_CHOOSE_A_SONG:
            if(resultCode == RESULT_OK) try {
                mediaPlayer.setDataSource(this, Uri.parse(data.getStringExtra(path)) );
            } catch (IOException e) {
                e.printStackTrace();
            }

    }
}

FileListActivity.class

if(new File(fileName).isDirectory()){
        intent = new Intent(this, FileListActivity.class);
        intent.putExtra("path", fileName);
        startActivityForResult(intent, R.integer.REQUEST_CHOOSE_A_SONG);
    }
    else {
        intent = new Intent();
        intent.putExtra("path", fileName);
        setResult(RESULT_OK, intent);
        finishActivity(R.integer.REQUEST_CHOOSE_A_SONG);
        Toast.makeText(this, fileName + " set to play!", Toast.LENGTH_SHORT).show();
        finish();
    }

提前谢谢! Malvinka

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。也许对某人有用。 FLAG_ACTIVITY_SINGLE_TOP还不够。这是:

FileListActivity.java

intent = new Intent(this, MainActivity.class);
intent.putExtra("path", fileName);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

和MainActivity.java

protected void onNewIntent (Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
    }