Android 在对话框中显示库中图像uri的缩略图
我在gallery中挑选图像并将其列在listview中。我想做的是,当我在listview中单击图像uri项时,它的缩略图就会出现。但无论何时单击该项,对话框中都不会显示任何内容。纯白色Android 在对话框中显示库中图像uri的缩略图,android,Android,我在gallery中挑选图像并将其列在listview中。我想做的是,当我在listview中单击图像uri项时,它的缩略图就会出现。但无论何时单击该项,对话框中都不会显示任何内容。纯白色 public class Fragment1 extends Fragment implements OnClickListener { ListView lv; ArrayList<Uri> array_list = new ArrayList<Uri>();
public class Fragment1 extends Fragment implements OnClickListener {
ListView lv;
ArrayList<Uri> array_list = new ArrayList<Uri>();
ArrayAdapter<Uri> array_adapter;
final int RQS_LOADIMAGE = 0;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment, container, false);
ImageButton b = (ImageButton) v.findViewById(R.id.button_ai);
b.setOnClickListener(this);
array_adapter = new ArrayAdapter<Uri>(getActivity(), R.layout.spinner_style, array_list);
lv = (ListView) v.findViewById(R.id.list_ai);
lv.setAdapter(array_adapter);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> a, View v, int position, long id) {
AlertDialog.Builder adb = new AlertDialog.Builder(getActivity());
Bitmap bmp = BitmapFactory.decodeFile(array_list.get(position).toString());
ImageView thumbView = new ImageView(getActivity());
thumbView.setImageBitmap(bmp);
LinearLayout layout = new LinearLayout(getActivity());
layout.setOrientation(LinearLayout.VERTICAL);
layout.addView(thumbView);
adb.setView(layout);
adb.show();
}
});
return v;
}
@Override
public void onClick(View v) {
switch (v.getId())
{
case R.id.button_ai:
Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, RQS_LOADIMAGE);
break;
}
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RQS_LOADIMAGE) {
if(resultCode == MainActivity.RESULT_OK) {
Uri imageUri = data.getData();
array_list.add(imageUri);
array_adapter.notifyDataSetChanged();
}
}
}
}
您不应该将decodeFile方法与Uri一起使用;而是使用MediaStore.Images.Media类中的静态getBitmap helper方法加载位图
编辑:
此外,如果您想显示缩略图,您应该缩小它的比例以提高性能和更好的内存占用。您可以从中了解如何做到这一点。通过使用openInputStream方法从ContentResolver打开InputSteam,并调用BitmapFactory.decodeStream,可以提供BitmapFactory.Options
此外,不应从主线程加载这些位图;此逻辑应在AsyncTask或Loader实现中移动。2个问题:1-您是否检查此代码是否在活动中而不是在片段中工作?2-你有没有检查你是否得到了URI,如果是,就把它贴在这里。。您可以尝试在uri之前添加file://文件string@matan大汉-1-不。2-是的。它在我的列表视图中显示为content://media/external/images/media/3971 我将发布什么?截图?我不能在这里张贴照片。我需要更多的名声。你的意思是字符串s2=file://+bmp?我建议使用毕加索图像加载器,它可以解决@corsair992提到的内存问题,也可以解决在没有openInputStream方法的情况下加载图像的问题。。了解更多信息,这是一个简单的方法,应该适合您:Picasso.withgetActivity.loadarray\u list.getposition.toString.resize50,50.centerCrop。intothumbView@MatanDahan-谢谢你,伙计。我会试着用它,像这样?Uri imageUri=data.getData;位图位图=MediaStore.Images.Media.getBitmapthis.getContentResolver,imageUri;为什么我收到一个错误,说类型Fragment1的方法getContentResolver未定义?@user3012327:抱歉,您需要将其更改为getActivity.getContentResolver.Thank。它正在工作。还有一个问题,如果我将它设置为getActivity.getContentResolver,我会收到一个错误,说未处理的异常类型FileNotFoundException和IOException eclipse给我的解决方案是用try-and-catch围绕它。我这样做了,它起作用了。我的问题是,为什么我会遇到这个错误,并且需要用try-and-catch来包围它?@user3012327:您需要处理这些异常,因为它们可以通过getBitmap方法抛出。如果Uri未指向有效的现有文件路径,将引发FileNotFoundException;如果关闭文件的InputStream时发生错误,将引发IOException。在您的案例中,它们实际上不应该出现,但是由于getBitmap方法声明它可以抛出这些异常,编译器会强制您处理它们。