mun*_* pk 7 android android-intent android-activity startactivityforresult
我有三个活动
MessagesAttachPhotoActivityMessageGalleryFolderSelectorActivityImagePickerActivityMessagesAttachPhotoActivity呼吁MessageGalleryFolderSelectorActivity有startActivityForResult().
MessageGalleryFolderSelectorActivity 活动显示手机上的照片文件夹,一个选择文件夹.
ImagePickerActivity然后调用setActivityForResult().一旦选择了图像ImagePickerActivity,它就会被传递回MessagesAttachPhotoActivityvia MessageGalleryFolderSelectorActivity.
当我第一次运行应用程序时,一切正常.但是,如果我之后尝试再次选择图像,MessageGalleryFolderSelectorActivity则不会在之后关闭setResult().
我已经打过电话finish(),this.finish(),((Activity)getApplicationContext()).finish(),并super.onBackPressed()没有成功.
为什么活动不会在连续运行中关闭?
Intent intent;
Bundle arguments = new Bundle();
Bundle bundle;
intent = new Intent(this, MessageGalleryFolderSelectorActivity.class);
bundle = new Bundle();
bundle.putInt(Constants.INTENT_EXTRA_LIMIT, Constants.IMAGES_SELECT_LIMIT);
bundle.putInt("Request", MessageThread.MessageType.IMAGE);
intent.putExtras(bundle);
startActivityForResult(intent, MessageThread.MessageType.IMAGE);
Run Code Online (Sandbox Code Playgroud)
imagesIntent.putExtra(ImagePickerActivity.INTENT_EXTRA_MODE,
ImagePickerActivity.MODE_MULTIPLE);
imagesIntent.putExtra(ImagePickerActivity.INTENT_EXTRA_LIMIT, 10);
imagesIntent.putExtra(ImagePickerActivity.INTENT_EXTRA_SHOW_CAMERA, false);
imagesIntent.putExtra(ImagePickerActivity.INTENT_EXTRA_ALBUM,album);
//imagesIntent.putExtra(ImagePickerActivity.INTENT_EXTRA_SELECTED_IMAGES, images);
startActivityForResult(imagesIntent, MessageThread.MessageType.IMAGE);
Run Code Online (Sandbox Code Playgroud)
Intent data = new Intent();
data.putParcelableArrayListExtra
(ImagePickerActivity.INTENT_EXTRA_SELECTED_IMAGES, selectedImages);
data.putExtra(ImagePickerActivity.INTENT_EXTRA_ALBUM,album);
setResult(RESULT_OK, data);
finish();
return true;
Run Code Online (Sandbox Code Playgroud)
@Override
protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
ArrayList<Image> selectedImages = data.getParcelableArrayListExtra
(ImagePickerActivity.INTENT_EXTRA_SELECTED_IMAGES);
String album = data.getStringExtra(ImagePickerActivity.INTENT_EXTRA_ALBUM);
Intent intent = new Intent();
intent.putExtra(ImagePickerActivity.INTENT_EXTRA_ALBUM, album);
intent.putParcelableArrayListExtra
(ImagePickerActivity.INTENT_EXTRA_SELECTED_IMAGES, selectedImages);
setResult(Activity.RESULT_OK, intent);
this.finish();
return;
} else if (resultCode == RESULT_CANCELED) {
}
}
Run Code Online (Sandbox Code Playgroud)
Jin*_*cis -1
我在这样的三项活动中尝试了与你相同的逻辑
活动A
public class A extends AppCompatActivity {
private static final int BCODE = 100;
private String Tag="A Activity";
Button triggerButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
triggerButton= (Button) findViewById(R.id.triggerButton);
triggerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent;
Bundle arguments = new Bundle();
intent = new Intent(A.this, B.class);
intent.putExtras(arguments);
startActivityForResult(intent, BCODE);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==BCODE){
if(resultCode==RESULT_OK){
Log.e(Tag,"succes");
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
从活动 A 开始,我通过使用 startActivityForResult 传递意图来启动活动 B
从活动 B 开始,我再次做同样的事情
public class B extends AppCompatActivity {
private static final int CCODE =200 ;
private String Tag="Activity B";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
Intent intent;
Bundle arguments = new Bundle();
intent = new Intent(this, C.class);
intent.putExtras(arguments);
startActivityForResult(intent, CCODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==CCODE){
if(resultCode==RESULT_OK){
Log.e(Tag,"suceess");
setResult(RESULT_OK,new Intent());
finish();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在活动 C 中,我刚刚在设置结果后完成活动
public class C extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_c);
setResult(RESULT_OK,new Intent());
finish();
}
}
Run Code Online (Sandbox Code Playgroud)
当活动 C 完成时,操作系统将恢复活动 B 并调用 onActivityResult()。在活动 B 的 onActivityResult 中,我正在设置结果并完成活动。然后操作系统将恢复活动 B 并调用活动 AI 的 onActivity 结果,此场景已尝试多次对我来说工作得很好。