2012-08-25 52 views
0

我有一個AsyncTask鏈接到刷新按鈕(當我點擊我的刷新按鈕時,我的AsyncTask被稱爲)。ProgressBar多重顯示

我有我的佈局我的進度一的LinearLayout場:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:background="@color/grey"> 
    <Button android:id="@+id/refresh_p" 
       android:text="@string/refresh_promo" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:background="@drawable/custom_button1"/> 

    <LinearLayout android:id="@+id/linearlayoutProgressBar" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:gravity="center"/> 
    <ListView 
     android:id="@android:id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:listSelector="@color/tabTransparent" 
     android:cacheColorHint="#00000000"/> 
     <!-- <ListView android:id="@+id/list_promo" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"/>--> 
</LinearLayout> 

在我的AsyncTask:

@Override 
    protected void onPreExecute() 
    { 
     super.onPreExecute(); 

     pb = new ProgressBar(context); 
     LinearLayout ll = (LinearLayout) ((Activity) context).findViewById(R.id.linearlayoutProgressBar); 
     ll.addView(pb); 
     pb.setVisibility(View.VISIBLE); 
    } 

    @Override 
    protected void onPostExecute(ArrayList<HashMap<String, String>> promoList) 
    { 
     ... 

     if (pb!=null) 
     { 
      pb.setVisibility(View.GONE); 
      ((LinearLayout)pb.getParent()).removeView(pb); 
     } 
    } 

我的問題是,當我把我的刷新按鈕超過2次點擊然後多個ProgressBar顯示在屏幕上..我只是希望新的ProgressBar在相同的位置替換舊的..

回答

0

我的猜測是,你可能以類似於以下的方式啓動您的AsyncTask:

new RefreshTask().execute(params); 

取而代之的是,在您的活動中創建一個實例變量。比方說,這個被命名爲mTask並替換上面的代碼以下電話:

if(mTask != null && mTask.getState != AsyncTask.State.RUNNING){ 
    mTask = new RefreshTask(); 
    mTask.execute(params); 
} 

這樣,您將確保只有一個你的任務的實例在給定時間運行,用戶將不得不等待,直到刷新完成後才能開始新的刷新。

如果你希望用戶能夠取消現有刷新任務並運行一個新的,你將不得不開始一個新的人之前先取消原有之一:

if(mTask != null){ 
    if(mTask.getStatus() == AsyncTask.Status.RUNNING){ 
     mTask.cancel(true); 
    } 
    mTask = new RefreshTask(); 
    mTask.execute(params); 
} 

這樣的老任務它的ProgressBar將會被新的替換。

+0

感謝您的支持,我也解決了這個問題,並且它的工作正常。謝謝 – eento