我在图库中选择图片并将其列在列表视图中。我想要做的是当我点击列表视图中的图像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();
}
}
}
}
答案 0 :(得分:0)
您不应将decodeFile()
方法与Uri
一起使用;而是使用getBitmap()
类中的静态MediaStore.Images.Media
辅助方法来加载Bitmap
。
修改强>
此外,如果要显示缩略图,则应将其缩小以获得性能和更好的内存占用。您可以从this guide了解如何执行此操作。您可以使用BitmapFactory.Options
方法打开InputSteam
的{{1}}并致电ContentResolver
来提供openInputStream()
。
此外,您不应从主线程加载这些BitmapFactory.decodeStream()
;这个逻辑应该移到Bitmap
或AsyncTask
实现中。