 <p>Your are starting activity <code>B</code> for result from activity <code>A</code></p> <pre><code>public void onClick(View v) { Intent intent = new Intent(A.this, B.class); startActivityForResult(intent,1); setResult(RESULT_OK); finish(); } </code></pre> <p>So activity <code>A</code> is expecting result to delivered by activity <code>B</code> when activity <code>B</code> finishes.</p> <p>Now, to get around this problem, start activity <code>B</code> in <code>onActivityResult()</code> method of the activity from which you started activity <code>A</code>.</p> <pre><code>// modified onClick method public void onClick(View v) { // simply set result to OK and finish activity A setResult(RESULT_OK); finish(); } </code></pre> <p>In the activity that starts activity <code>A</code>, define two constants or you can have a separate Java class to define constants and refer them in this class.</p> <pre><code>public static final int REQUEST_CODE_FOR_A = 100; public static final int REQUEST_CODE_FOR_B = 101; </code></pre> <p>Override the <code>onActivityResult()</code> method in the activity that starts activity <code>A</code> and start activity <code>B</code> as follows</p> <pre><code>@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { if(requestCode == REQUEST_CODE_FOR_A) { // start activity B when activity returns RESULT_OK Intent intent = new Intent(this, B.class); startActivityForResult(intent, REQUEST_CODE_FOR_B); } else if (requestCode == REQUEST_CODE_FOR_B) { // handle the result from Activity B } } } </code></pre> <p>Hope this helps.</p>