onClick 中的第二个意图在第一个之前执行
Posted
技术标签:
【中文标题】onClick 中的第二个意图在第一个之前执行【英文标题】:Second intent in onClick is executed before first 【发布时间】: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() 【参考方案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();
【讨论】:
以上是关于onClick 中的第二个意图在第一个之前执行的主要内容,如果未能解决你的问题,请参考以下文章
如何连续响应两列?在第一个文本中,在bootstrap 4中的第二个图像中
WIX React本机导航:堆栈中的第二个屏幕显示在第一个屏幕上
第二个 AJAX 调用中的函数发生在第一个 AJAX 调用之前
REGEX - 在字符串之间查找文本 - 第一个可选,但在第一个匹配之前只有第二个
放置在 tabcontrol 的第二个 tabitem 中的数据网格的 WPF-'Index out of Range' 错误(但如果放置在第一个 tabitem 中,它工作正常)