7

Android アプリケーションで問題が発生しています。アクションバーの「上へのナビゲーション」ボタンが押されたときに「onActivityResult」メソッドが呼び出されない理由がわかりません。私はすべてを適切に行ったと思います:

  • 親アクティビティは、「startActivityForResult」メソッドで子アクティビティを起動します。

    Intent intent = new Intent(ParentActivity.this, ChildActivity.class);
    startActivityForResult(intent, 1000);
    

  • 親アクティビティが「onActivityResult」メソッドをオーバーライドしました。

    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
       super.onActivityResult(requestCode, resultCode, data);   
       if (data != null && requestCode == 1000)
       {
            Bundle extras = data.getExtras();
            Boolean rc = extras.getBoolean(MyConstants.INTENT_EXTRA_RESULT);
            if (rc)
            {
                .......
            }
        }
    }
    

  • 子アクティビティは「onOptionsItemSelected」をオーバーライドし、「NavUtils.navigateUpFromSameTask」を呼び出します。

    public boolean onOptionsItemSelected(MenuItem item)
      {
        if (item.getItemId() == android.R.id.home)
        {
            Intent result = new Intent((String)null);
            result.putExtra(MyConstants.INTENT_EXTRA_RESULT, true);
            setResult(RESULT_OK, result);
            NavUtils.navigateUpFromSameTask(this);          
            return true;
        }           
        else
        {
            return super.onOptionsItemSelected(item);
        }
    }
    

  • 子アクティビティが 'finish' メソッドをオーバーライドしました。このメソッドは結果を設定します。

    public void finish() 
    {
       Intent result = new Intent((String)null);
       result.putExtra(Constantes.INTENT_EXTRA_HAY_QUE_RECALCULAR, hayQueRecalcular);               
       setResult(RESULT_OK, result);
    
       super.finish();
    }   
    

    「onActivityResult」メソッドが呼び出されない理由がわかりません。

    私が観察したのは、アクション バーの [ナビゲーションを上へ] ボタンが押されたときに、子アクティビティが終了していない ('finish' メソッドが呼び出されていない) ことです。ただし、戻るボタン (ハードウェア ボタン) が押されたときに呼び出されます。

    私が間違っていることは何ですか?

    ありがとう

  • 4

    1 に答える 1

    5

    子アクティビティは親アクティビティのすぐ上にあるため、このメソッドは必要ありません

     NavUtils.navigateUpFromSameTask(this);    
    

    のように書く

    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == android.R.id.home) {
            Intent result = new Intent((String) null);
            result.putExtra(MyConstants.INTENT_EXTRA_RESULT, true);
            setResult(RESULT_OK, result);
            finish();
            return true;
        } else {
            return super.onOptionsItemSelected(item);
        }
    }
    

    ホームボタンが押されたときにお子様のアクティビティを終了します。

    于 2013-12-03T15:35:33.693 に答える