2017-07-04 118 views
0

因此,我已切換到使用 ProgressDialog,我現在沒有找到任何方法來使ProgressBar可取消的含義,如果我點擊ProgressBar的視圖區域以外的任何地方,它會解僱,並且我想附上一個監聽它,這樣我可以在取消代碼時執行一些代碼。如何取消ProgressBar?

ProgressBar是最簡單的,不確定的,非定製一個,我有:

<ProgressBar 
     android:id="@+id/search_tutors_progress_bar" 
     style="?android:attr/progressBarStyle" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="8dp" 
     android:layout_marginRight="8dp" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_constraintTop_toTopOf="parent" 
     android:visibility="gone"/> 

我怎樣才能實現上述?

回答

0

我假設你的ProgressBar坐在一些佈局中,例如一個LinearLayout。您可以創建一個OnTouchListener並將其應用於包含ProgressBar的佈局,將相同的OnTouchListener應用於任何可見的其他視圖。您可以關閉ProgressBar並從OnTouchListener中執行其他代碼。

2

您只使用ProgressBar來表示某個事物的進度,它不包含任何邏輯,也不做任何類型的過程,它只會被外部過程更新(如果您想要)(如AsyncTask,for例)。這就是爲什麼它沒有任何偵聽器,並且它不可取消,因爲ProgressBar只在那裏,所以另一個進程可以選擇更新它,或者在完成時將其可見性設置爲GONE。因此,基本上,您不應該擔心進度條本身,您應該擔心進度條代表的進程以及此進程可以如何以及何時取消,因此您可以調用progressBar.setVisibility(View。當這發生時)。

就像一個例子,我使用ProgressBar來表示加載ImageView與畢加索。畢加索提供了一個回調,讓您知道何時裝載成功或失敗。在這兩種情況下,我都將ProgressBar的可見性設置爲GONE,並根據案例採取其他操作。這就是爲什麼我說你必須知道如何以及何時應該控制ProgressBar的可見性。

Picasso.with(this) 
       .load("https://image.tmdb.org/t/p/w640" + m.getPosterPath()) 
       .into(posterImageView, new com.squareup.picasso.Callback() { 
        @Override 
        public void onSuccess() { 
         progressBar.setVisibility(View.GONE); 
        } 

        @Override 
        public void onError() { 
         progressBar.setVisibility(View.GONE); 
         noImageFoundTextView.setVisibility(View.VISIBLE); 
        } 
}); 

確定,因此,如果您擔心的是UX和你想一個進度dismissable用戶,就可以實現這種解決辦法的:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:layout_gravity="center" 
     android:layout_marginTop="5dp"> 
     <ProgressBar 
      android:id="@+id/progressBar" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center"/> 

     <ImageView 
      android:id="@+id/dismissButton" 
      android:layout_width="20dp" 
      android:layout_height="20dp" 
      android:gravity="center" 
      android:background="@android:drawable/ic_menu_close_clear_cancel" 
      android:layout_gravity="center"/> 
</FrameLayout> 

的ImageView的將處理關閉進度條。

dismissButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      progressBar.setVisibility(View.GONE); 
      dismissButton.setVisibility(View.GONE); 
      //Take other actions on dismiss 
     } 
}); 

enter image description here

+0

然後,如果有什麼加載圖像告訴在一個非典型的情況下相當長的時間了(慢ñ/W)和你的用戶,感覺有點討厭這個等待,試圖在進度條外面「解僱」它?理想情況下,開心的情況是,解僱酒吧並可選擇顯示消息。通過ProgressDialog,我可以通過dismiss listener很好地處理取消操作。你發佈的內容(視圖可見度)是我已經擁有的,但我想要關注UX的細微差別。 –

+0

檢查我的最新編輯,我不知道這是否適合你要找的。 – FerDensetsu

+0

+1好吧,我最終沒有這樣做,但這是相當不錯的,你所建議的。在其他佈局中可能會出現這種情況。謝謝。 –

0

在最上面的(家長)layout.Apply OnTouchListener,並把此行

progressBar.setVisibility(View.GONE);