0

リストビューとカスタムアダプターを使用しています。アダプターは、画像ストレージをロードし、ストロージをダウンロードして表示します。

イメージビューがランダムな写真に見えるまで、すべてのファイルをダウンロードしてインストールします。ダウンロードが完了すると、すべての写真が正常に表示されます。

public class NewsListAdapter extends ArrayAdapter<NewsData>{
List<NewsData> items;
Context context;
public HaberListAdapter(Context context, int textViewResourceId,List<NewsData> haberArray) {
    super(context, textViewResourceId, haberArray);
    this.items = haberArray;
    this.context=context;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    View v=convertView;
    if (v == null) {
        LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(R.layout.custom_haber_list, null);
        holder = new ViewHolder();

        holder.txtCaption = (TextView) v.findViewById(R.id.txtCaption);
        holder.txtContent = (TextView) v.findViewById(R.id.txtContent);
        holder.txtDate= (TextView) v.findViewById(R.id.txtDate);
        holder.imageView= (ImageView)  v.findViewById(R.id.image);

        v.setTag(holder);
    }else{
        holder=(ViewHolder)v.getTag();
    }


    final NewsData o = items.get(position);


    if (o != null) {
        holder.txtCaption.setText(o.getCaption());
        holder.txtContent.setText(o.getContent());
        holder.txtDate.setText(o.getTarih());

        if (o.getimageStatus()==0)
        {
            String[] params={ String.valueOf(o.getID()),o.getImageWebUrl()};
            new setDownloadImage(holder.imageView,position).execute(params);
        }
        else
        {
            String imagePath = context.getFilesDir().toString() +"/news"+o.getID()+".jpg";
            File fs=new File(imagePath);
            if (fs.exists()) 
                holder.imageView.setImageDrawable(Drawable.createFromPath(imagePath));
            else
            {
                dataBase db=new dataBase(context);
                db.setimageStatus(o.getID(), 0);
            }
        }
    }
    if (position % 2 == 0)
        v.setBackgroundColor(Color.WHITE);
    else 
        v.setBackgroundColor(Color.parseColor("#D4E4FD"));
    return v;

}

class ViewHolder {

    public  TextView txtCaption,txtContent,txtDate;
    public ImageView imageView;

}



class setDownloadImage extends AsyncTask<String,String,String>
{
    private int position;
    private final WeakReference<ImageView> imageViewReference;
    public setDownloadImage(ImageView imageView,int position)
    {
        this.position=position;
        imageViewReference = new WeakReference<ImageView>(imageView);
    }
    @Override
    protected String doInBackground(String... params) {
        String f_url=params[1];
        String id=params[0];
        int count;
        try {
            URL url = new URL(f_url);
            URLConnection conection = url.openConnection();
            conection.connect();
            InputStream input = new BufferedInputStream(url.openStream(), 8192);
            OutputStream output = new FileOutputStream(context.getFilesDir()+"/news"+id+".jpg");
            byte data[] = new byte[1024];
            while ((count = input.read(data)) != -1) {
                output.write(data, 0, count);
            }
            output.flush();
            output.close();
            input.close();

            return id;
        } catch (Exception e) {
            return "";
        }

    }

    @Override
    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        if (!result.equals(""))
        {
            ImageView imageView = imageViewReference.get();
            String imagePath = context.getFilesDir().toString() +"/news"+result+".jpg";
            imageView.setImageDrawable(Drawable.createFromPath(imagePath));
            dataBase db=new dataBase(context);
            db.setimageStatus(Integer.valueOf(result),1);
            items.get(position).setimageStatus(1);
        }
    }

}
}
4

1 に答える 1

0

これは、リストの高さに関連する問題である可能性があります。

リストの高さが wrap_content ではなく、fill_parent として定義されていることを確認します。

また、 Android-Universal-Image-Loaderもチェックしてください。これは、Android で画像を非同期に読み込み、キャッシュし、表示するためのオープン ソース ライブラリです。

于 2013-09-07T11:53:12.927 に答える