簡體   English   中英

無法在列表視圖上顯示圖像

[英]Not able to display the image on listview

我正在嘗試顯示從URL下載的圖像並將其顯示在列表視圖中。 這是我的源代碼。 輸出有一個空白點..就這樣...

這是我從中調用的java。

ABC s = ABC.getSingletonObject();
String[][] full_data = s.getString();

private ListView listView1; 

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity2);

    //second one is always the type of data...
    Weather weather_data[] = new Weather[]
    {      // full_data[1][0] contains the URL String..
        new Weather(full_data[1][0],full_data[1][2],full_data[1][3]),
        new Weather(full_data[2][0],full_data[2][2],full_data[2][3]),
    };

    WeatherAdapter adapter = new WeatherAdapter(this,R.layout.listview_header_row,                                       weather_data);
    listView1 = (ListView)findViewById(R.id.listView1);
    View header = (View)getLayoutInflater().inflate(R.layout.listview_header_row, null);
    listView1.addHeaderView(header);
    listView1.setAdapter(adapter);
}

這是我的適配器..

public class WeatherAdapter extends ArrayAdapter<Weather> {
       Context context;
       int layoutResourceId;
       Weather data[] = null;

    public WeatherAdapter(Context context, int layoutResourceId, Weather[] data) {
        super(context, layoutResourceId, data);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.data = data;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    WeatherHolder holder = null;

    if(row == null)
    {
        LayoutInflater inflater = ((Activity)context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);

        holder = new WeatherHolder();
        holder.imgIcon = (ImageView)row.findViewById(R.id.imageView1);
        holder.txtTitle = (TextView)row.findViewById(R.id.txt1);
        holder.txtRating=(TextView)row.findViewById(R.id.rtxt1);

        row.setTag(holder);
    }
    else
    {
        holder = (WeatherHolder)row.getTag();
    }

    Weather weather = data[position];
    holder.txtTitle.setText(weather.wtitle);
    holder.imgIcon.setImageDrawable(weather.wicon);
    holder.txtRating.setText(weather.wrating); 
    //holder.imgIcon.setImageResource(R.drawable.ic_launcher);
    //holder.imgIcon.setImageBitmap(weather.wicon);
    return row;
    } 

    static class WeatherHolder
    {
    //Bitmap imgIcon;
    ImageView imgIcon;
    TextView txtTitle;
    TextView txtRating;
    }
}

這是另一個Java文件

public class Weather {

    public Drawable publicdraw;
    public Drawable wicon;
    public String wtitle;
    public String wrating;
    public Weather(){
    super();
    }

    public Weather(String icon, String title,String rating) {
        super();
        LoadImageFromWebOperations(icon);
        this.wtitle = title;
        this.wrating=rating;
        this.wicon=publicdraw;
    }

    public void LoadImageFromWebOperations(String url_string) {
        try {
            grabImage(url_string);

        } catch (Exception e) {

        }
    }

    public void grabImage(String url) {
        new GrabURL1().execute(url);
    }


     private class GrabURL1 extends AsyncTask<String, Void, Void> {

    public Drawable d;
    InputStream is;

     protected Void doInBackground(String... urls) {

            try {
                is = (InputStream) new URL(urls[0]).getContent();
                d = Drawable.createFromStream(is, "src name");
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            return null;

    }

        protected void onPostExecute(Void unused) {
            publicdraw=d;

        }
    }
}

我建議您閱讀本教程 直截了當,並不困難而且非常有效。 我將其用於在列表視圖上加載圖像的項目。
如果您卡在某個地方,請詢問。

在將圖像分配到列表之前,嘗試添加以下條件。

if (holder.imgIcon != null && position < weather_data.size()) {
      Weather weather = data[position];
      holder.imgIcon.setImageDrawable(weather.wicon);
}

我有同樣的問題,這個技巧對我來說就像是一種魅力。

謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM