2016-06-28 7 views
0

SITUATIONAndroidのは、ProgressDialog

私はGoogleでこの件について多くのものを読んでてきたが、私はまだ私の問題を解決することはできませんを表示することはできません。私はボタンを押すと、出力を表示する前に多くのタスクを実行しなければならないアプリがあります。私はこのような進捗ダイアログを表示したい:

enter image description here

非常に簡単に、左側の左側とテキスト「の結果を計算しています...」に移動しているサークル。


PROBLEM

私は次のコードを持っている:私は最後(一部の数字と英字)で正しい出力を参照してくださいので

public class fragmentMetodoTangenti extends Fragment { 

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

    // Inflate the layout for this fragment 
    final View view = inflater.inflate(R.layout.fragment_metodo_tangenti, container, false); 

    Button button = (Button) view.findViewById(R.id.button1); 
    button.setOnClickListener(new View.OnClickListener() { 

    @Override 
     public void onClick(View v) { 


     try { 

      loading = new ProgressDialog(view.getContext()); 
      loading.setCancelable(true); 
      loading.setMessage("Calculating results..."); 
      loading.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
      loading.show(); 

      //other "heavy" code here (a lot of for and while loops) 

      loading.dismiss(); 

     } catch (Exception e) { 
      //catching the error 
     } 


    }); 

    //return the view 
    return view; 

} 

} 

コードは完璧に動作します。唯一の問題は、ボタンをクリックするとスピンナーが入った進捗ダイアログが表示されないことです。

問題はnew ProgressDialog(view.getContext());にあると思いますが、わかりません。私はAndroid Studioの最新バージョンを使用しています。

どうすればこの問題を解決できますか?

LOG HERE

+0

ログにメッセージがありますか? –

+0

はい私も質問に追加しました> http://pastebin.com/d8sxrnTE。何らかの理由で、mView == nullと表示されます –

答えて

0

クリック時のコールバックは、あなたがこのスレッドの「ヘビー」の作業を行うべきではない滑らかなUIを維持するために、UIスレッド上で呼ばれています。

この場合、これは過剰ですが、https://github.com/ReactiveX/RxAndroidをご覧ください。 信託私は、仕事にRxJava/RxAndroidを使用する利点の多くは、このケースでは、あなたがやって問題を解決することができ、があります。

public void OnClick(View v) { 
    Observable.defer(() -> heavyTask()) 
       .observeOn(Schedulers.computation()) 
       .subscribeOn(AndroidSchedulers.mainThread()) 
       .doOnSubscribe(() -> showProgressBar()) 
       .doOnCompleted(() -> hideProgressBar()) 
       .subscribe(); 
} 

これは、開始時には難しいですが、あなたは本当にきちんとしたコードで終わります。

また、この種の問題の標準的な解決策であるAsyncTaskクラスを見てみることもできます。ここにサンプルを見つけることができますDownload a file with Android, and showing the progress in a ProgressDialog

+0

何のために使用する必要がありますか? – paul