在onClick中执行第二个意图之前先执行

时间:2018-06-24 21:28:27

标签: android android-intent android-activity camera android-gallery

我正在编写一个Android应用程序,并且遇到了问题: 我需要从图库中选择一个图像,然后将其发送到其他活动(然后转到该活动)。当我只有一个从图库中选择图像的Intent时,它做的很好,打开图库,让您选择图像,然后什么也没发生,很好。 但是,当我添加另一个用于其他活动的Intent时,它将忽略第一个Intent。

ImageButton gallery;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        gallery = (ImageButton) findViewById(R.id.imageButton2);
        gallery.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setType("image/*");
                intent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);

                goToConfirmActivity();
            }
        });
    }
    public void goToConfirmActivity(){
        Intent goToConfirmIntent = new Intent(MainActivity.this, confirmActivity.class);
        goToConfirmIntent.putExtra("image", uri);
        startActivity(goToConfirmIntent);
    }

它直接进入confirmActivity,而没有从图库中选择图片。我不知道该如何解决。预先谢谢你。

2 个答案:

答案 0 :(得分:0)

启动goToConfirmActivity();之后,您将立即呼叫Intent.ACTION_GET_CONTENT。由于获取内容的调用是异步的,因此控制将继续执行下一行。结果将执行goToConfirmActivity();并启动下一个意图。为避免这种覆盖,onActivityResult如下

@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == PICK_IMAGE_REQUEST){
        //You can get URI from intent data
        goToConfirmActivity();
    }
}

答案 1 :(得分:0)

您应该覆盖onActivityResult,因为这样您就可以检查用户是从画廊中实际拾取图像还是在打开画廊后按下返回按钮。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK){
        Uri uri= data.getData();
        goToConfirmActivity(uri);
    } else {
        //Some error has occurred.
    }
}

您的goToConfirmActivity方法应类似于:

void goToConfirmActivity(Uri uri){
    Intent goToConfirmIntent = new Intent(MainActivity.this, confirmActivity.class);
    goToConfirmIntent.putExtra("image", uri);
    startActivity(goToConfirmIntent);
}