Android 是否刷新活动/图像视图?

Android 是否刷新活动/图像视图?,android,Android,在我的第一个活动中,我有一个按钮和一个webview,当我单击按钮时,它会在imageview中打开一个包含webview内容的新活动。(我在位图中转换webview并使用此位图设置imageview) 问题是当我第一次点击按钮时,什么也没发生,我的屏幕保持白色。但是,如果我在第一个活动中返回并重新单击按钮,imageview就会显示得很好 为什么第一次没有显示imageview?我是否需要刷新第二个活动或图像视图之类的内容 WebViewActivity.java public class W

在我的第一个活动中,我有一个按钮和一个webview,当我单击按钮时,它会在imageview中打开一个包含webview内容的新活动。(我在位图中转换webview并使用此位图设置imageview)

问题是当我第一次点击按钮时,什么也没发生,我的屏幕保持白色。但是,如果我在第一个活动中返回并重新单击按钮,imageview就会显示得很好

为什么第一次没有显示imageview?我是否需要刷新第二个活动或图像视图之类的内容

WebViewActivity.java

public class WebViewActivity extends Activity {

    private WebView webView;
    ImageView imageView;
    Button button;


    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.webview);

       webView = (WebView) findViewById(R.id.webView1);
       webView.getSettings().setJavaScriptEnabled(true);
       String customHtml = "<BODY BACKGROUND=\"pic_10.jpg\"><BODY><div style=\"position: absolute; bottom: 0; width: 100%\"><div style=\"padding:24px 0 0;margin:0;height:40px;background:transparent;position:relative;\"><a href=\"http://www.amazon.com\" style=\"padding:0 140px 0 0;margin:0;height:40px;display:block;text-decoration:none;overflow:hidden;background:#fff;\" target=\"_blank\"><span style=\"padding:0 0 0 40px;margin:0;display:block;overflow:hidden;background:transparent url(http://ads.gumgum.com/com/gumgum/tests/amazon.png) no-repeat scroll left center;\"><p style=\"padding:0;margin:0;font:bold 12px/16px Arial;color:#000;text-decoration:underline;display:block;height:16px;overflow:hidden;text-align:left;padding:2px 0;word-wrap:break-word;\">HBase Administration Cookbook</p><p style=\"padding:0;margin:0;font:italic 12px/16px Arial;color:#c60;text-decoration:none;display:block;height:16px;overflow:hidden;text-align:left;word-wrap:break-word;\">www.amazon.com</p></span><span style=\"position:absolute;bottom:0;right:70px;overflow:hidden;\"><img src=\"http://ecx.images-amazon.com/images/I/41OEZDHmUoL._SL75_.jpg\" style=\"border:none;max-width:64px;*width:64px;height:64px;\"></span></a></div></div>";


       webView.loadDataWithBaseURL("file:///android_asset/", customHtml , "text/html", "utf-8", null);

       button = (Button) findViewById(R.id.btnChangeImage);

    }

    public void sendMessage(View view) {

           webView.setWillNotCacheDrawing(false);
           webView.destroyDrawingCache();
           webView.setDrawingCacheEnabled(true);
           webView.measure(MeasureSpec.makeMeasureSpec(480, MeasureSpec.EXACTLY), 
                    MeasureSpec.makeMeasureSpec(800, MeasureSpec.EXACTLY));
           webView.layout(0, 0,  webView.getMeasuredWidth(),  webView.getMeasuredHeight());


            webView.buildDrawingCache(true);
        Bitmap bmap = Bitmap.createBitmap(webView.getDrawingCache());
        webView.destroyDrawingCache();
        //imageView.setMaxHeight(55);
        //imageView.setMaxWidth(20);
        Bitmap bmap_New = scaleDownBitmap(bmap,400,this);
        Intent intent = new Intent(this, ImageViewActivity.class);
        intent.putExtra("BitmapImage", bmap_New);
        startActivity(intent);
    }

     public static Bitmap scaleDownBitmap(Bitmap photo, int newHeight, Context context) {

         final float densityMultiplier = context.getResources().getDisplayMetrics().density;        

         int h= (int) (newHeight*densityMultiplier);
         int w= (int) (h * photo.getWidth()/((double) photo.getHeight()));

         photo=Bitmap.createScaledBitmap(photo, w, h, true);

         return photo;
         }
    public class ImageViewActivity extends Activity {

    ImageView imageView;

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

        imageView = (ImageView) findViewById(R.id.imageView1);
        Intent intent = getIntent();
        Bitmap bmp = (Bitmap)intent.getParcelableExtra("BitmapImage");
        imageView.setImageBitmap(bmp);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_image_view, menu);
        return true;
    }

}
我不知道它是否链接,但当我启动应用程序时,我的catlog中有以下内容:

E/chromium(32671): external/chromium/net/disk_cache/stat_hub.cc:190: [1214/103321:ERROR:stat_hub.cc(190)] StatHub::Init - App com.example.androidtestadserver isn't supported.

我强烈推荐一种不同的方法。
通过intent传递整个位图需要大量内存,在旧款手机上无法使用,比如说SDK 2.3。
尝试将位图作为byteArray传递,并构建它以在下一个活动中显示。 如果您想在活动之间传递它,我会将它存储在一个文件中。这对你来说效率更高,工作量更少。您可以使用MODE_private在数据文件夹中创建任何其他应用程序都无法访问的私人文件。
顺便说一下,以下几点对我很有用:

public void sendMessage(View view) {

       webView.setWillNotCacheDrawing(false);
       webView.destroyDrawingCache();
       webView.setDrawingCacheEnabled(true);
       webView.measure(MeasureSpec.makeMeasureSpec(480, MeasureSpec.EXACTLY), 
                MeasureSpec.makeMeasureSpec(800, MeasureSpec.EXACTLY));
       webView.layout(0, 0,  webView.getMeasuredWidth(),  webView.getMeasuredHeight());


        webView.buildDrawingCache(true);
    Bitmap bmap = Bitmap.createBitmap(webView.getDrawingCache());
    webView.destroyDrawingCache();
    //imageView.setMaxHeight(55);
    //imageView.setMaxWidth(20);
    Bitmap bmap_New = scaleDownBitmap(bmap,400,this);
    Intent intent = new Intent(this, ImageViewActivity.class);
    //Bitmap b; // your bitmap
    ByteArrayOutputStream bs = new ByteArrayOutputStream();
    bmap_New.compress(Bitmap.CompressFormat.PNG, 50, bs);
    intent.putExtra("BitmapImage", bs.toByteArray());
    //intent.putExtra("BitmapImage", bmap_New);
    startActivity(intent);
}
接收:

public class ImageViewActivity extends Activity {

    ImageView imageView;

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

        Log.d("ImageViewActivity", "Oncreate");

        imageView = (ImageView) findViewById(R.id.imageView1);
        //Intent intent = getIntent();
        //Bitmap bmp = (Bitmap)intent.getParcelableExtra("BitmapImage");
        if( getIntent().getExtras() != null ){
            Bitmap b = BitmapFactory.decodeByteArray(
                    getIntent().getByteArrayExtra("BitmapImage"),0,getIntent().getByteArrayExtra("BitmapImage").length);  
            imageView.setImageBitmap(b);

        }
        else{
            Log.d("ImageViewActivity", "null");
        }

    }


}

你能给我看看代码吗?可能是图像尚未加载。我添加了2个java类。你的意思是如果我等待第二个活动,图像应该出现?如果是,我已经等了,什么也没发生。不,我的意思是,图像应该在视图完成时设置,使用回调。你能详细介绍一下plz吗?我不确定是否理解,您说过我应该在调用ImageViewActivity之前设置图像?当您按下按钮时,我认为webview尚未准备好渲染,但这不重要。您是否尝试在OnResume处理程序上设置映像?或者在调试过程中,bmp的内容是什么?这很奇怪,我刚刚尝试了你的代码,我仍然有相同的问题,首先单击按钮白色屏幕,但我返回到第一个活动,并重新单击按钮图像显示良好。。我将按文件进行尝试,但我不知道这是否会产生影响。(我在catlog的一行上加了一句)我知道我的意图发送位图的方法不是很好。因此,我也无意中尝试了,我也遇到了同样的问题(没有显示):是的,我确实尝试了你的代码,但我得到了相同的结果。我第一次单击按钮时,没有显示任何内容,但如果我返回第一个活动并重新单击按钮,则图像显示良好。。我不知道为什么第一次什么都没出现。。