在对话框中显示来自图库的图像uri的缩略图

时间:2014-01-05 07:47:53

标签: android

我在图库中选择图片并将其列在列表视图中。我想要做的是当我点击列表视图中的图像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();
          }
      }
    }

}

1 个答案:

答案 0 :(得分:0)

您不应将decodeFile()方法与Uri一起使用;而是使用getBitmap()类中的静态MediaStore.Images.Media辅助方法来加载Bitmap

修改

此外,如果要显示缩略图,则应将其缩小以获得性能和更好的内存占用。您可以从this guide了解如何执行此操作。您可以使用BitmapFactory.Options方法打开InputSteam的{​​{1}}并致电ContentResolver来提供openInputStream()

此外,您不应从主线程加载这些BitmapFactory.decodeStream();这个逻辑应该移到BitmapAsyncTask实现中。