2017-07-04 22 views
0

ProgressBarからProgressDialogに切り替えました。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。 GONE)を実行します。

例として、私はProgressBarを使用してPicasaで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); 
        } 
}); 

OK、あなたの懸念がUXについてです、あなたはユーザーによるプログレスバーがdismissableようにしたい場合、あなたは回避策のこの種を実装することができるように:ImageViewのが扱う

<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> 

プログレスバーの却下最上位(親)layout.Apply OnTouchListenerで

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

この行を入れて、ロードイメージが言うならば非定型場合(遅いNにかなり時間がかかったものを/ W)とあなたのユーザーは、この待ち時間に悩まされて、進行状況バーの外を軽くたたくことを試みました。幸いなシナリオは理想的には、バーの解任とオプションでメッセージを表示することです。 ProgressDialogを使用すると、私はリスナを却下してキャンセルをうまく処理しました。あなたが投稿したもの(可視性の表示)は私がすでに持っているものですが、私はUXのニュアンスを気にしたいと思っていました。 –

+0

私の最新の編集を確認してください、あなたが探しているものに合うかどうかわかりません。 – FerDensetsu

+0

+1まあ、私は最後にこれに行くことはありませんでしたが、これはあなたが示唆しているものはかなりまともです。他のいくつかのレイアウトでこれを正確に実行するかもしれません。ありがとうございました。 –

0

、そしてその後

progressBar.setVisibility(View.GONE); 
関連する問題