2014-09-14 5 views
2

В моем приложении я установил изображение в действии под названием День. Теперь, когда пользователь хочет изменить изображение, он выбирает кнопку и выбирает изображение из галереи. Вот код:OnActivityResult не обновляет ImageView в Android

private void choosePhoto() { 
    Intent pickPhoto = new Intent(Intent.ACTION_PICK, 
      android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
    startActivityForResult(pickPhoto, REQUEST_IMAGE_PICK); 
} 

Когда пользователь выбирает изображение, я ловлю в onActivityResult, что он выбрал, и хочу, чтобы установить его в качестве нового ImageView, но не обновляется. Я имею в виду, старое изображение все еще видно, но не новое. Я должен уйти и снова войти в работу, чтобы увидеть изменения. Вот onActivityResult:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == REQUEST_IMAGE_PICK && resultCode == RESULT_OK) { 
     Uri selectedImage = data.getData(); 
     String realImagePath = PhotoUtils.getRealPathFromURI(this, selectedImage); 
     Bitmap imageBitmap = PhotoUtils.decodeSampledBitmapFromFile(dayPhoto, realImagePath); 
     dbAdapter.setDayImage(realImagePath, dayOfMonth, month, year); 
     dayPhoto.setImageBitmap(imageBitmap); // this doesn't work, the image is not updated 
    } 
} 
+0

'decodeSampledBitmapFromFile (dayPhoto, realImagePath);'? Почему ваш ImageView dayPhoto используется в этой функции? 'dbAdapter.setDayImage (realImagePath,' Пожалуйста, объясните, что здесь происходит. – greenapps

+0

dayPhoto просто необходим, чтобы получить высоту и ширину. setDayImage устанавливает это изображение в базу данных, так или иначе, я решил проблему. –

ответ

1

добавить ниже код после dayPhoto.setImageBitmap(imageBitmap);

dayPhoto.invalidate(); 
+0

Спасибо, но его не работает –

+0

, поэтому я думаю, что 'PhotoUtils.decodeSampledBitmapFromFile (dayPhoto, realImagePath);' может иметь некоторые проблемы, а 'imageBitmap' не является новым. – mmlooloo

+0

Я только что отлаживал, и у realImagePath был правильный путь. «ImageView» пуст (имеет установленный по умолчанию образ), а затем пользователь выбирает фотографию из галереи, она работает. Но когда я хочу переопределить другим изображением, это не так. –

1

Попробуйте использовать setImageDrawable следующим образом:

dayPhoto.setImageDrawable(new BitmapDrawable(imageBitmap)); 
+0

Пробовал также с dayPhoto.invalidate(), но все равно Спасибо. –

0

мне удалось решить проблему, которая была где-то в другом месте.

Мне нужно было использовать метод onWindowsFocusChanged setImageBitmap, потому что я не мог сделать это в методе onCreate.

Так что мой код был:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_day); 

    initializeLayoutAndContent(); 
    initializeActionBar(); 
} 

private void initializeLayoutAndContent() { 
    dayPhoto = (ImageView) findViewById(R.id.dayImage); 
    int id = getIntent().getExtras().getInt("dayPosition"); 
    day = dbAdapter.getAllDaysFromDb().get(id); 

    dayOfMonth = day.getDayId(); 
    month = day.getMonthId(); 
    year = day.getYearId(); 
} 

@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 

    String imgPath = day.getPhotoPath(); 
    if (imgPath != null) { 
     dayPhoto.setImageBitmap(PhotoUtils.decodeSampledBitmapFromFile(dayPhoto, imgPath)); 
    } 
} 

мне просто нужно было двигаться почти весь initializeLayoutAndContent метод к onWindowsFocusChanged поэтому данные был инициализирован каждый раз с dayPhoto.

+0

Это взлом, в лучшем случае, и на самом деле не решает вашу проблему. –

+0

Да, но я могу не загружать изображение в onCreate, и я не вижу другого решения. –