【发布时间】:2019-09-16 03:03:35
【问题描述】:
在一个 android studio 3.4 项目活动中,该活动有四个不同的按钮,当单击这些按钮时,这些按钮会传递不同的字符串值(标志)。我正在尝试将图像文件选择器意图中的变量字符串标志中的捆绑数据传递给onActivityResult()
四个按钮启动了四种不同的图像选择器 如果传递了特定的字符串标志值,但我的字符串一直以 null 的形式传递,我希望我的方法执行某些操作
这是四个按钮之一的代码。
buttonChoose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showFileChooser("pic");
}
});
private void showFileChooser(final String flg) {
Intent intent = new Intent();
intent.putExtra("flg", flg);
setResult(Activity.RESULT_OK, intent);
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
filePath = data.getData();
Log.d(TAG, "filePath 1 >>" + filePath);
try {
bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
String myTag = data.getStringExtra("flg");
Log.d(TAG, "myTag >>" + myTag);
if (myTag.equalsIgnoreCase("pic")) {
imageView.setImageBitmap(bitmap);
} else if (myTag.equalsIgnoreCase("License")) {
imageViewLicense.setImageBitmap(bitmap);
} else if (myTag.equalsIgnoreCase("RoadWorthiness")) {
imageViewRoadWorthiness.setImageBitmap(bitmap);
} else if (myTag.equalsIgnoreCase("Insurance")) {
imageViewInsurance.setImageBitmap(bitmap);
} else {
}
} catch (IOException e) {
e.printStackTrace();
}
}
````````
【问题讨论】:
-
你真的不能那样做。启动的应用程序不会期待额外的东西,所以它非常不太可能做任何事情来确保它在结果
Intent上。您需要自己跟踪;例如,通过将其持久化到存储中 - 可能只使用SharedPreferences- 或者通过在onSaveInstanceState()和onRestoreInstanceState()方法中将其放入Activity的保存状态Bundle并从中检索它。 -
您可以通过传递不同的请求代码并检查活动结果来实现