我有一个MultiplePhotoSelectActivity.java
让用户选择多张照片并将路径存储在ArrayList中的功能。
public void btnChoosePhotosClick(View v){
ArrayList<String> selectedItems = imageAdapter.getCheckedItems();
if (selectedItems!= null && selectedItems.size() > 0) {
//Toast.makeText(MultiPhotoSelectActivity.this, "Total photos selected: " + selectedItems.size(), Toast.LENGTH_SHORT).show();
Log.d(MultiPhotoSelectActivity.class.getSimpleName(), "Selected Items: " + selectedItems.toString());
Intent intent = new Intent(MultiPhotoSelectActivity.this,PreuploadActivity.class);
intent.putStringArrayListExtra("selectedItems", selectedItems);
setResult(RESULT_OK, intent);
startActivity(intent);
}
}
这是ArrayList<String> selectedItems
来自imageAdapter
ArrayList<String> getCheckedItems() {
ArrayList<String> mTempArry = new ArrayList<>();
for(int i=0;i<mImagesList.size();i++) {
if(mSparseBooleanArray.get(i)) {
mTempArry.add(mImagesList.get(i));
}
}
return mTempArry;
}
用户选择照片后,logcat中将显示以下结果
D / MultiPhotoSelectActivity:选定的项目:[/storage/emulated/0/Pictures/Screenshot_1486795867.png、/storage/emulated/0/Pictures/15592639_1339693736081458_1539667284_n.jpg、/storage/emulated/0/15592639_1339693736081458_1539667284_n.jpg]
现在的问题是,在用户选择图像后,我想使用数组列表中的文件路径在另一个活动中显示图像
这就是PreuploadActivity.java
应该接收的意图数据。这是让用户选择照片的按钮MultiplePhotoSelectActivity.java
//this button will open gallery,and select photo
addPhoto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(PreuploadActivity.this,MultiPhotoSelectActivity.class);
startActivityForResult(intent,PICK_IMAGE_REQUEST);
}
});
这是onActivityResult()
应该从中接收Intent数据的MultiplePhotoSelectActivity.java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data.getData() !=null){
ArrayList<String> selectedItems = data.getStringArrayListExtra("selectedItems");
for(String selectedItem : selectedItems){
Uri filePath = Uri.parse(selectedItem);
try{
// bimatp factory
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 8;
bitmap = BitmapFactory.decodeFile(filePath.getPath(),
options);
//Setting image to ImageView
ImageView imageView = new ImageView(getApplicationContext());
LinearLayout.LayoutParams layoutParams =
new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT);
imageView.setLayoutParams(layoutParams);
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setPadding(0, 0, 0, 10);
imageView.setAdjustViewBounds(true);
imageView.setImageBitmap(bitmap);
linearMain.addView(imageView);
}catch (Exception e) {
e.printStackTrace();
}
}
所以现在onActivityResult()
的PreuploadActivity.java
我不能在发送该ArrayList中显示后面的图像MultiplePhotoSelectActivity.java
。我怀疑是什么问题时putExtra的意图,我试过至今却依然没有什么不同。
像答案一样的putParcelable或putSerializable
所以我需要知道的是
1)我应该如何在两个Activity中放置putExtra和getExtra,以便发送和接收图像的ArrayList?
2)显示图像的手柄是否正确?如果不正确,请告诉我我做错了什么。
编辑:尝试了Aslam Hossin解决方案后,我尝试了此
ArrayList<String> myList = (ArrayList<String>) getIntent().getSerializableExtra("selectedItems ");
查看一些文档后,我发现我犯了一些错误
MultiPhotoSelectActivity.java
Intent intent = new Intent(MultiPhotoSelectActivity.this,PreuploadActivity.class);
intent.putStringArrayListExtra("selectedItems", selectedItems);
setResult(RESULT_OK, intent);
startActivity(intent);
我发现,以上代码有3个错误,
1)MultiPhotoSelectActivity.java
不应输入新的意图,而应将数据发送回PreuploadActivity.java
2)我应该像这样设置结果
setResult(Activity.RESULT_OK, data);
3)根据以下文档,所以我在finish()
之后添加setResult()
仅在调用finish()后才返回数据。您需要在调用finish()之前先调用setResult(),否则将不会返回任何结果。
我在结果码的设置解决它PreuploadActivity.java
像下面
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == PICK_IMAGE_REQUEST && resultCode == Activity.RESULT_OK ){
//setting Activity.RESULT_OK
ArrayList<String> selectedItems = data.getStringArrayListExtra("selectedItems");
这是MultiPhotoSelectActivity.java
我做的以下更改
ArrayList<String> selectedItems = imageAdapter.getCheckedItems();
if (selectedItems!= null && selectedItems.size() > 0) {
//Toast.makeText(MultiPhotoSelectActivity.this, "Total photos selected: " + selectedItems.size(), Toast.LENGTH_SHORT).show();
Log.d(MultiPhotoSelectActivity.class.getSimpleName(), "Selected Items: " + selectedItems.toString());
final Intent data = new Intent();
data.putStringArrayListExtra("selectedItems", selectedItems);
setResult(Activity.RESULT_OK, data);
finish();
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句