【问题标题】:how to set a default picture in an imageview in a list in android?如何在android列表中的imageview中设置默认图片?
【发布时间】:2014-11-24 23:05:09
【问题描述】:

我想在结果为空时显示默认图片,这是我的尝试:

public static Bitmap getBitmapFromURL(String src) {
                try {
                    URL url = new URL(src);
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    connection.setDoInput(true);
                    connection.connect();
                    InputStream input = connection.getInputStream();
                    Bitmap myBitmap = BitmapFactory.decodeStream(input);
                    connection.disconnect();
                    return myBitmap;
                } catch (IOException e) {
        //          tasvirdimg.setImageResource(R.drawable.p3_books);
                    e.printStackTrace();
                    return null;
                }
            }
        }

使用getBitmapFromURL的类:

class RetrievePic extends AsyncTask<String, String, Bitmap>{

                    @Override
                    protected Bitmap doInBackground(String... urls) {
                        String url = urls[0];
                        return JSONCommands.getBitmapFromURL(url);
                    }   
    }

ListAdapter 中执行RetrievePic 类:

RetrievePic retPic = new RetrievePic();
retPic.execute(JSONCommands.firstURL + MainActivity.books_array.get(position).tasvir);
Bitmap img = null;
try {
    img = retPic.get();
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    tasvirlimg.setImageResource(R.drawable.p3_books);
            e.printStackTrace();
    } catch (ExecutionException e) {
    // TODO Auto-generated catch block
    tasvirlimg.setImageResource(R.drawable.p3_books);
    e.printStackTrace();
    }
    tasvirlimg.setImageBitmap(img);

当图片为空时,它不显示任何内容,但应该显示默认图片R.drawable.p3_books。感谢您的帮助。

【问题讨论】:

  • 您可以使用Universal Image LoaderPicasso 下载您的图片,并为您的占位符设置默认图片。
  • 我想知道人们来这里编辑问题等以获得星星!!!!请帮我解决我的问题!
  • @MohammadRahchamani 坦克你,但你能帮我用我自己的代码吗?!!
  • 我认为你应该在 if/else 语句中设置默认图片而不是 catch 块。
  • @MohammadRahchamani 是的。我这样做了,但没有用。

标签: android listview bitmap imageview drawable


【解决方案1】:

你想做的是在你的适配器的getView()方法的实现中,像这样,

...
final imageView = ...;
imageView.setImageBitmap(defaultBitmap);
new AsyncTask<Void,Void,Bitmap>() {
  public Bitmap doInBackground(Void... params) {
    // get bitmap from `net, or return null if failure
  }

  public void onPostExecute(Bitmap result) {
    if (result != null) {
      imageView.setBitmap(result);
    }
  }
}.execute();

这样,默认设置。如果您碰巧得到网络结果,请更改默认值。

【讨论】:

  • 我真的无法理解:))) 请举例说明,让15名声望明白!!!谢谢
【解决方案2】:

你可以试试这个:

if(img == null) 
{ 
     tasvirlimg.setImageDrawable(R.drawable.p3_books); 
}
else
{ 
     tasvirlimg.setImageBitmap(img);
}

【讨论】:

  • 它有错误亲爱的! tasvirlimg 是一个 ImageView 并且没有 setImageBitmap 类。
  • 试试 tasvirling.setImageDrawable(R.drawable.p3_books);而不是 setImageBitmap(..)。如果这不适合你。您可以尝试 Jeffrey Blattman 发布的示例,这应该也可以。
  • 亲爱的你看到我的代码了吗?因为 R.drawable.p3_books 是我试过的资源 ​​tasvirdimg.setImageResource(R.drawable.p3_books);谢谢
【解决方案3】:

为什么不在xml中设置item的默认图片,然后result不为null时会替换默认图片

  <ImageView 
     ...
         android:src="@drawable/p3_books"
        />

编辑:

        class RetrievePic extends AsyncTask<String, String, Bitmap>{

     final image = (ImageView) findViewById(R.id.limg_tasvir);

            @Override
            protected Bitmap doInBackground(String... urls) {
                String url = urls[0];
                return JSONCommands.getBitmapFromURL(url);
            }

            @Override
                    protected void onPreExecute() {
                         runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                        image.setBackgroundResource(R.drawable.p3_books);
                                }
                            });

        }
}

【讨论】:

  • 这是我的 ImageView: 如您所见,我设置了此选项,但它不起作用!
  • runOnUiThread 和 tasvirdimg 是 2 个错误。我在另一个班级有 tasvirdimg,但我不知道 runOnUiThread 。
  • @NiloofarHakkaki - 我刚刚注意到并将其更改为 tasvirlimg - 如果 runonuithread 给出错误,请将其取出 - protected void onPreExecute() { tasvirlimg.setBackgroundResource(R.drawable.p3_books); }
  • tasvirlimg 和 tasvirdimg 都在其他类中:) bitmap 的类是独占的。
  • @NiloofarHakkaki - 您是否尝试过将它们设为静态以便能够访问它们 - 我需要查看更多代码或错误 logcat - 您应该将默认图片设置为您找到的任何一个 ViewById limg_tasvir
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多