如何将NetworkImageView(volley库)内容传递给另一个actvity?

时间:2015-04-27 10:11:52

标签: android textview imageview

我在ListView中有两个NetworkImageView元素,一个是可见的NetworkImageView元素,另一个是不可见的NetworkImageView元素。我已经为Listview元素实现了一个onlickListener,只要我在ListView中选择元素,它就会调用一个新的活动。在调用新活动时,我将这两个NetworkImageView元素传递给新活动。但我只能看到新活动中的可见NetworkImageView元素和空白空间而不是另一个NetworkImageView元素。

main_activity.java的代码

ListView lv=(ListView) findViewById(R.id.list);
lv.setOnItemClickListener(new OnItemClickListener() 
{
        @Override
        public void onItemClick(AdapterView<?> parent, View view,int position, long id)
        {
            try{
                ImageView image1=(ImageView) view.findViewById(R.id.visible);
                ImageView image2=(ImageView) view.findViewById(R.id.invisible);
                image1.buildDrawingCache();
                image2.buildDrawingCache();
                Bitmap bmp1=image1.getDrawingCache();
                Bitmap bmp2=image2.getDrawingCache();
                Intent i=new Intent(MainActivity.this, new_Activity.class);
                i.putExtra("picture1", bmp1);
                i.putExtra("picture2", bmp2);
                startActivity(i);
                }
            catch (Exception e)
{Toast.makeText(getApplicationContext(),e.toString(),Toast.LENGTH_LONG).show();}}});

new_Activity.java的代码

Intent i = getIntent();

    Bitmap bmp1=(Bitmap)i.getParcelableExtra("picture1");
    Bitmap bmp2=(Bitmap)i.getParcelableExtra("picture2");

    ImageView image1 = (ImageView) findViewById(R.id.desc_image1);
    ImageView image2 = (ImageView) findViewById(R.id.desc_image2);

    image1.setImageBitmap(bmp1);
    image2.setImageBitmap(bmp2);

XML文件

activity_main.xml中

<com.android.volley.toolbox.NetworkImageView
    android:id="@+id/visible"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

<com.android.volley.toolbox.NetworkImageView
    android:id="@+id/invisible"
    android:visibility="gone"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

new_activity xml

<ImageView
    android:id="@+id/desc_image1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
<ImageView
    android:id="@+id/desc_image2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

3 个答案:

答案 0 :(得分:0)

确保已在不可见的NetworkImageView中设置了图像。 只需将其显示并检查图像是否已设置。

像...

<com.android.volley.toolbox.NetworkImageView
    android:id="@+id/invisible"
    android:visibility="visible"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

另外,

bmp2=image2.getDrawingCache(); 

只接受可见部分,我想。

感谢。

答案 1 :(得分:0)

而不是

Bitmap bmp1=image1.getDrawingCache();

尝试

Bitmap bmp1 = ((BitmapDrawable)image1.getDrawable()).getBitmap();

答案 2 :(得分:0)

我遇到了类似的问题。在我的ListView中,每个项目都包含一个ImageView来显示来自服务器的图像,当用户单击ImageView时,我需要在视图中显示它以支持缩放功能。

我试过这个:

holder.iv.setDrawingCacheEnabled(true);
Bitmap bitmap = ((ImageView) v).getDrawingCache();
mBrowseImageListener.onBrowseImage(bitmap);

但是当屏幕上的列表长度时,我得到一个错误的位图,通常是另一个项目上显示的位图当前。

我试过这个:

holder.iv.setDrawingCacheEnabled(true);
Bitmap bitmap = ((ImageView) v).getDrawingCache();
mBrowseImageListener.onBrowseImage(bitmap);
holder.iv.setDrawingCacheEnabled(false);

不幸的是,这导致了一个致命的例外:

java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap

最后我找到了这个解决方案:

Drawable drawable = holder.iv.getDrawable();
if (!(drawable instanceof BitmapDrawable)){
    Log.e(LOG_TAG, "This drawable is not an instance of BitmapDrawable!");
    return;
}
Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
if (bitmap==null || bitmap.isRecycled()){
    Log.w(LOG_TAG, "This bitmap was recycled!");
    return;
}
mBrowseImageListener.onBrowseImage(bitmap);

希望这对你有所帮助。