2014-01-21 3 views
0

Предположим, у меня есть 3 мероприятия. Activity A запускает активность B, активность B начинает деятельность C.Как получить код результата от действия дочернего дочернего элемента?

В деятельности AI есть код

Intent i = new Intent(A.this, B.class); 
startActivityForResult(i, SOME_NUMBER); 

В деятельности BI есть код:

Intent i = new Intent(B.this, C.class); 
finish(); // this activity should die and start the C activity 
startActivityForResult(i, SOME_NUMBER); 

Наконец, в деятельность CI имеет код:

setResult(RESULT_OK); 
finish(); 

Моя проблема в том, что e activity A не получает resultCode, который была введена в действие C. Мой onActivityResult (интермедиат, внутр Intent) метод в деятельности Взгляд, как это:

switch(requestCode){ 
case SOME_NUMBER: 
    if(resultCode == RESULT_OK){ 
     // the activity C has returned RESULT_OK 
    }else if(resultCode == RESULT_CANCELED){ 
     // the activity C has returned RESULT_CANCELED 
    } 
break; 
} 

Он всегда входить в другой, если (ResultCode == RESULT_CANCELED).
Я хочу знать, как передать правильный результатCode из C-активности в A-активность.

ответ

1

конец() - Назовите это, когда ваша деятельность завершена и должна быть закрыта. Итак, вы всегда получаете код результата 0 (RESULT_CANCELED = 0).

Пример:

first_layout.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
<TextView 
    android:id="@+id/textView" 
    android:layout_width="fill_parent" 
    android:layout_height="70px"/> 
</LinearLayout> 

FirstActivity.java:

package com.example.startforresultdemo; 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.Intent; 
import android.util.Log; 
import android.view.Menu; 
import android.widget.TextView; 

public class FirstActivity extends Activity { 
    TextView textView; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.first_layout);  
     textView = (TextView)this.findViewById(R.id.textView); 

     Intent intent = new Intent(this, SecondActivity.class); 
     intent.putExtra("sampleData", "This is Sample Data"); 
     startActivityForResult(intent, 1); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.first, menu); 
     return true; 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if(resultCode==RESULT_OK && requestCode==1){ 
     String msg = data.getStringExtra("returnedData"); 
     textView.setText(msg); 
     }else{ 
      Log.i("babu", "requestCode "+requestCode+" resultCode "+resultCode); 
      //String msg = data.getStringExtra("returnedData"); 
      textView.setText("requestCode "+requestCode+" resultCode "+resultCode); 
     } 
    } 

} 

SecondActivity.java:

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 

public class SecondActivity extends Activity{ 

    Intent intent; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     intent= getIntent(); 
     String msg = intent.getStringExtra("sampleData"); 
     msg += ", Added at Second"; 

     Intent intent2 = new Intent(this, ThirdActivity.class); 
     intent2 .putExtra("sampleData", msg); 
     startActivityForResult(intent2, 10); 
     //finish(); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if(resultCode==RESULT_OK && requestCode==10){ 
     String msg = data.getStringExtra("returnedData"); 
     intent.putExtra("returnedData", msg); 
     setResult(RESULT_OK, intent); 
     finish(); 
     } 
    } 



} 

ThirdActivity.java:

package com.example.startforresultdemo; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 

public class ThirdActivity extends Activity{  
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Intent intent= getIntent(); 
     String msg = intent.getStringExtra("sampleData"); 
     msg += ", Added at Third"; 
     intent.putExtra("returnedData", msg); 
     setResult(RESULT_OK, intent); 
     finish(); 
    } 

} 

ИЛИ Добавить следующий код в свой класс по вашему желанию. вы можете получить результат от вашего third activity.

FirstActivity.java:

if(getIntent().getStringExtra("returnedData") != null){   
       Intent intent= getIntent(); 
       String msg = intent.getStringExtra("returnedData");   
       textView.setText(msg); 

     }else{ 
      Intent intent = new Intent(this, SecondActivity.class); 
      intent.putExtra("sampleData", "This is Sample Data");   
      startActivity(intent); 
     } 

     SecondActivity.java: 
     intent= getIntent(); 
     String msg = intent.getStringExtra("sampleData"); 
     msg += ", Added at Second";  
     Intent intent2 = new Intent(this, ThirdActivity.class); 
     intent2 .putExtra("sampleData", msg);  
     finish(); 
     startActivity(intent2); 

     ThirdActivity.java 
     Intent intent= getIntent(); 
     String msg = intent.getStringExtra("sampleData"); 
     msg += ", Added at Third"; 
     Intent intent1 = new Intent(this, FirstActivity.class); 
     intent1.putExtra("returnedData", msg); 
     startActivity(intent1); 
     finish(); 
+0

Ok @ Баба-K большого ответа! Но причина, по которой деятельность 2 должна быть закончена, заключается в том, что если пользователь находится в действии 3, и он нажимает кнопку «Назад», приложение должно вернуться к активности 1, а не к действию 2. – yakamoko

+0

Ок. @ Якамоко, я редактировал мои ответьте как ваше требование. Пожалуйста, смотрите. –

+0

ваш ответ прекрасен !! Огромное спасибо. – yakamoko

Смежные вопросы