2011-07-26 3 views
2

A.javaonActivityResult не выполняется, если цель имеет Intent.FLAG_ACTIVITY_NO_HISTORY

public class A extends Activity { 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Log.d(A.class.getName(), "OnCreate"); 

     Intent intentB = new Intent(this, B.class); 
     intentB.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
     startActivity(intentB); 
    } 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     Log.d(A.class.getName(), "onActivityResult"); 
    } 
} 

B.java

public class B extends Activity { 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Log.d(B.class.getName(), "OnCreate"); 

     Intent imagesIntent = new Intent(Intent.ACTION_GET_CONTENT); 
     imagesIntent.setType("image/*"); 
     Intent openGalleryIntent = Intent.createChooser(imagesIntent, "pic"); 
     startActivityForResult(openGalleryIntent, 2); 
    } 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     Log.d(B.class.getName(), "onActivityResult"); 
     Log.d(B.class.getName(), data.getData().toString()); 
    } 

} 

AndroidMenifest.xml

<uses-sdk android:minSdkVersion="8" /> 

    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name=".A" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name="B"></activity> 

    </application> 

Задача после выбора изображения из галереи, метод onActivityResult() класса класса B не выполняется.

Хотя если intentB.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY) удален из экземпляра намерения, то onActivityResult() класса B выполняет штраф.

ответ

2

Это правильное поведение. Когда вы выбираете FLAG_ACTIVITY_NO_HISTORY в качестве флага при вызове следующего действия. Активность ребенка удаляется из стека, и, как только вы выходите, он просто закончит.

Reference

Вопрос почему вы даже хотите использовать этот флаг?

+1

Я не хочу показывать эту активность снова, когда пользователь нажимает кнопку «Назад». Собственно, я неправильно понял основные понятия. Во всяком случае, я получил намек на ваш ответ. – dira

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