2016-04-08 2 views
1

Так что я работаю над приложением, в котором мне нужно показать диалог, и внутри этого диалогового окна пользователь может нажать кнопку, чтобы выбрать изображение из галерея или сделать снимок с камеры и отобразить это изображение в ImageView внутри диалогового окна ImageView. Я могу взять фотографию из камеры/галереи, а затем я использую ее как изображение ImageView, но она не показывает ее, пока я не нажму кнопку еще раз, как будто макет должен быть обновлен. Это мой код:Android - Dialog не refresing ImageView при получении изображения из галереи/камеры

вызвать диалог (get_permissions(); используется в Android M для получения записи и чтения разрешения на хранение, это работает правильно)

protected void createDialog() { 
     final Dialog dialog = new Dialog(WeightActivity.this, android.R.style.Theme_Material_Light_Dialog_Alert); 
     dialog.getWindow(); 
     dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     dialog.setContentView(R.layout.dialog_add_weight); 

     Button okButton = (Button) dialog.findViewById(R.id.okButton); 
     final ImageButton selectImageButton = (ImageButton) dialog.findViewById(R.id.selectImageButton); 
     final ImageView imageView = (ImageView) dialog.findViewById(R.id.imageView); 

     selectImageButton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
      get_permissions(); 
      selectImage(); 
      imageView.setImageBitmap(bm); 
      } 
     }); 

     dialog.show(); 
    } 

private void selectImage() { 
    final String[] items = WeightActivity.this.getResources().getStringArray(R.array.photo_options); 
    AlertDialog.Builder builder = new AlertDialog.Builder(WeightActivity.this); 
    builder.setTitle(R.string.weight_dialog_add_photo); 
    builder.setItems(items, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int item) { 
      if (items[item].equals(items[0])) { 
       Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       startActivityForResult(intent, REQUEST_CAMERA); 
      } else if (items[item].equals(items[1])) { 
       Intent intent = new Intent(
         Intent.ACTION_PICK, 
         android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       intent.setType("image/*"); 
       startActivityForResult(
         Intent.createChooser(intent, "Select File"), 
         SELECT_FILE); 
      } 
     } 
    }); 
    builder.show(); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == RESULT_OK) { 
     if (requestCode == REQUEST_CAMERA) { 
      bm = (Bitmap) data.getExtras().get("data"); 
     } else if (requestCode == SELECT_FILE) { 
      Uri selectedImageUri = data.getData(); 
      String[] projection = {MediaStore.MediaColumns.DATA}; 
      CursorLoader cursorLoader = new CursorLoader(this, selectedImageUri, projection, null, null, 
        null); 
      Cursor cursor = cursorLoader.loadInBackground(); 
      int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA); 
      cursor.moveToFirst(); 
      String selectedImagePath = cursor.getString(column_index); 
      BitmapFactory.Options options = new BitmapFactory.Options(); 
      options.inJustDecodeBounds = true; 
      BitmapFactory.decodeFile(selectedImagePath, options); 
      options.inJustDecodeBounds = false; 
      bm = BitmapFactory.decodeFile(selectedImagePath, options); 
     } 
    } 
} 

Может кто-нибудь помочь мне, пожалуйста? ? Спасибо большое!

ответ

0

Проблема заключается в следующем,

get_permissions(); 
selectImage(); 
imageView.setImageBitmap(bm); 

selectImage() начинает свою деятельность, но она не блокирует; он немедленно возвращается. Затем вы вызываете setImageBitmap(), возможно, в поле экземпляра bm с нулевым значением.

Переместить или иным образом вызвать вызов imageView.setImageBitmap() в onActivityResult(), только после того, как вы декодировали изображение.

Смежные вопросы