app widget setImageViewUri does not update the image

后端 未结 3 1071
情深已故
情深已故 2020-12-17 17:52

i have an app widget, which contains only one imageview. i redraw that image and store it as png in apps\'s private memory and then i set the RemoteViews\' image with the ur

相关标签:
3条回答
  • 2020-12-17 18:35

    If the Uri remains unchanged, it seems Android won't update the image. I've found a bit of a hack to get around this though. Just call widget.setImageViewUri(R.id.widget_icon, Uri.parse("")); before widget.setImageViewUri(R.id.widget_icon, uri);.

    It calls setImageViewUri() twice, but seems to be working OK. I'd love to hear a better way to fix it though, as I'm experiencing this issue myself.

    0 讨论(0)
  • 2020-12-17 18:50

    Well it looks like setImageViewUri caches images and does not refresh them if the have the same name.

    Not the most elegant solution but it works, every second time it will use a different file name.

    String filename = new String("bitmap-1.png");
    // rotate files, due to not being refreshed if same name 
    if ( context.deleteFile(filename) ) {
       filename = new String("bitmap-0.png");
    }
    FileOutputStream out = context.openFileOutput(filename, Context.MODE_WORLD_READABLE);
    bitmap.compress(Bitmap.CompressFormat.PNG, 80, out);
    file = context.getFileStreamPath(filename);
    out.close();
    updateViews.setImageViewUri(R.id.image1,Uri.parse(file.toString())); 
    
    0 讨论(0)
  • 2020-12-17 18:51

    I hope this helps anyone else. I was trying to use that method in a remove list view but it never worked. But using bitmaps worked for me. I was able to update pictures in any of the records and they were updating and there was no caching. This is the static method I used.

    public static Bitmap getBitmap( String imageLocation ) {
    
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inPreferredConfig = Bitmap.Config.ARGB_8888;
    
        return BitmapFactory.decodeFile(imageLocation, options);
    }
    

    then

    bitmap = BitmapUtils.getBitmap( address.getPhotoLocation() );
    row.setImageViewBitmap( R.id.row_image, bitmap );
    
    0 讨论(0)
提交回复
热议问题