【问题标题】:Second intent in onClick is executed before firstonClick 中的第二个意图在第一个之前执行
【发布时间】:2018-12-03 11:26:19
【问题描述】:

我正在编写一个 Android 应用程序并遇到了问题: 我需要从图库中选择一张图片,然后将其发送到其他活动(并转到该活动)。当我只有一个从图库中选择图像的意图时,它运行良好,打开图库,让您选择图像,然后什么也没有发生,很好。 但是当我添加另一个 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,无需从图库中选择图片。我想知道如何解决这个问题。提前谢谢你。

【问题讨论】:

  • 从结果中获取图片uri后覆盖onActivityResult然后调用goToConfirmActivity()

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


【解决方案1】:

您应该覆盖 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);
} 

【讨论】:

    【解决方案2】:

    您在启动Intent.ACTION_GET_CONTENT 后立即调用goToConfirmActivity();。由于获取内容的调用是异步的,控制将继续执行下一行。结果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();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-15
      • 2018-05-29
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2018-07-17
      相关资源
      最近更新 更多