将结果提供给同一个活动

时间:2015-05-30 19:13:56

标签: android android-intent

我有一个用于获取文件夹路径的Activity。要导航到下一个文件夹,我使用文件夹的路径为此Activity创建一个intent。当我试图返回结果时,它会在中间丢失。

给出结果:

@Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        Intent returnIntent = getIntent();
        switch (item.getItemId())
        {
            case R.id.action_ok:
                returnIntent.putExtra("path", filename);
                Log.d("Result", "Picker"+String.valueOf(RESULT_OK));
                setResult(Activity.RESULT_OK, returnIntent);
                finish();
                return true;
            case R.id.action_abort:
                setResult(RESULT_CANCELED, returnIntent);
                finish();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

导航(是的,它是ListActivity):

@Override
    protected void onListItemClick(ListView l, View v, int position, long id)
    {
        filename = (String) getListAdapter().getItem(position);
        if (path.endsWith(File.separator))
        {
            filename = path + filename;
        }
        else
        {
            filename = path + File.separator + filename;
        }
        if (new File(filename).isDirectory())
        {
            Intent intent = new Intent(this, DirectoryPicker.class);
            intent.putExtra("path", filename);
            startActivityForResult(intent,0);
        } 
        this.finish();
    }

获得结果:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        if (getIntent() != null)
        {
            Intent returnIntent = getIntent();
            setResult(RESULT_OK, returnIntent);
            finish();
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

1 个答案:

答案 0 :(得分:0)

  

当我试图返回结果时,它会在中间丢失。

中间没有丢失。您正在寻找错误位置的结果。 X-Content-Duration启动getIntent()后,Activity会返回意图。它不知道您在其他Activity中设置的结果。您必须使用onActivityResultIntent data的第三个参数。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   if (data != null) {
       setResult(RESULT_OK, data);
       finish();
   }