0

私はすでにURLからロードされた画像のリストビューを持っています。読み込み中に各画像に回転する円のようなものを追加したいと思います。今のところ、ロードされる前にロードされている画像の代わりにデフォルトを使用しました。私がここで主に見つけたのは、すべてのクラスがAsyncTaskを拡張しているということです。さて、私が持っているのはこれです:

jsonの解析が行われるアクティビティがあります。次に、BaseAdapterを拡張するMyCustomAdapterがあります。

    //constructor
    public MyCustomAdapter (Context c, List<RowItem> items){
    this.context = c;
    this.sRowItems = items;
    imageLoader=new ImageLoader(c.getApplicationContext());
}
.
.
.

public View getView(int position, View convertView, ViewGroup parent){
    ViewHolder holder = null;

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

    if(convertView == null){
        convertView = inflater.inflate(R.layout.list_layout, null);
        holder = new ViewHolder();
        holder.txtName = (TextView) convertView.findViewById(R.id.name);
        holder.txtDesc = (TextView) convertView.findViewById(R.id.desc);
        holder.imageView = (ImageView) convertView.findViewById(R.id.prof_pic);



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

    RowItem sItem = (RowItem) getItem(position);

    holder.txtName.setText(sItem.getShopName());
    holder.txtDesc.setText(sItem.getShopDesc());
    imageLoader.DisplayImage(sItem.getImageUrl(), holder.imageView);

    return convertView;
}

次に、イメージローダークラスがあります。そのため、AsyncTaskの代わりに、通常のJavaスレッドを使用しました。その一部はこれです:

public class ImageLoader {

   MemoryCache memoryCache=new MemoryCache();
   FileCache fileCache;
   private Map<ImageView, String> imageViews=Collections.synchronizedMap(new WeakHashMap<ImageView, String>());
   ExecutorService executorService; 

public ImageLoader(Context context){
    fileCache=new FileCache(context);
    executorService=Executors.newFixedThreadPool(5);
}

final int stub_id=R.drawable.ic_launcher;

public void DisplayImage(String url, ImageView imageView)
{
    imageViews.put(imageView, url);
    Bitmap bitmap=memoryCache.get(url);
    if(bitmap!=null)
        imageView.setImageBitmap(bitmap);
    else
    {
        queuePhoto(url, imageView);
        imageView.setImageResource(stub_id);
    }
}

private void queuePhoto(String url, ImageView imageView)
{
    PhotoToLoad p=new PhotoToLoad(url, imageView);
    executorService.submit(new PhotosLoader(p));
}

私はここで使用するstackoverflowで答えを見ました

ProgressDialog mDialog = new ProgressDialog(getApplicationContext());

しかし、ImageLoaderクラスに配置したときに、コードが機能しませんでした。この読み込みアニメーションサークルを実装するのに苦労しています。助けてください。どうもありがとう。

4

2 に答える 2

4

各リストアイテムにプログレスバーがあります。画像がダウンロードされるたびに、このプログレスバーを非表示にします[可視性を設定します]。あなたのxmlは何かに見えるはずです

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <ImageView
        android:id="@+id/imgToBeSet"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:contentDescription="@string/img_cont_desc_common" />

    <ProgressBar
        android:id="@+id/imgProgress"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_centerInParent="true"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/textMsg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/imgToBeSet"
        android:layout_centerHorizontal="true"
        android:visibility="gone"
        android:text="@string/msg_download_failed" />

</RelativeLayout>

さらに、ダウンロードが失敗した場合に表示されるテキストビューがあります。この場合、このテキストビューを削除してデフォルトの画像を表示し、ダウンロードが失敗した場合はプログレスバーを非表示にすることができます。

于 2013-03-19T06:12:58.783 に答える
0

実行前:

ProgressDialog pd= new ProgressDialog(getApplicationContext());
pd.setMessage("Please wait while Image lis being loaded");
pd.show();

doInBackground()の場合:

pd.setMessage("Downloading image ....");

postExecuteで:

pd.setMessage("");
pd.dismiss();
于 2013-03-19T06:04:12.357 に答える