2016-10-12 8 views
0

今私はこのような私のアプリケーションでMaterial Dialogを使用しています:不確かな素材ダイアログが進行中に関数を呼び出す方法はありますか?

dialog = new MaterialDialog.Builder(MainActivity.this) 
      .title("Please Wait") 
      .content("Loading") 
      .progress(true, 0) 
      .titleColor(getResources().getColor(R.color.grey)) 
      .widgetColor(getResources().getColor(R.color.grey)) 
      .progressIndeterminateStyle(true) 
      .show(); 

私はプログレスバーは、例えば、アドレス(のためのような を実行している間にバックグラウンドで機能を呼びたい)今はどこがすべき関数名ですこの関数を呼び出しますか?

私は確定プログレスダイアログボックスを使用して試してみましたが、私はこれは私が関数内で呼び出していますが、それはかかるので、それは最初にnull値を返すものです

while (dialog.getCurrentProgress() != dialog.getMaxProgress()) { 
// If the progress dialog is cancelled (the user closes it before it's done), break the loop 
if (dialog.isCancelled()) break; 
// Wait 50 milliseconds to simulate doing work that requires progress 
try { 
    Thread.sleep(50); 
} catch (InterruptedException e) { 
    break; 
} 
// Increment the dialog's progress by 1 after sleeping for 50ms 
dialog.incrementProgress(1);} 

を考えたとして、それが働いていませんでした緯度経度を送信するモバイルGPSの時刻。私は、この関数が非null値を返すまで進捗ダイアログが表示されている間、バックグラウンドでこの関数を実行する必要があります。

private void Address() { 

gps.getLocation();

 if (gps.canGetLocation == false) { 

      // Here you can ask the user to try again, using return; for that 
      Toast.makeText(MainActivity.this, "Check your internet connection", Toast.LENGTH_SHORT).show(); 
      //return; 
     } else { 

      // Getting location co-ordinates 
      double latitude = gps.getLatitude(); 
      double longitude = gps.getLongitude(); 
      // Toast.makeText(this, "Latitude:" + latitude + " | Longitude: " + longitude, Toast.LENGTH_LONG).show(); 

      address = gps.getLocationAddress(); 
      street = gps.getLocationArea(); 
      String[] compare = {"Jawahar Nagar", "Tilak Nagar", "Sector 4", "Adarsh Nagar", "Gurunanakpura", 
        "Raja Park", "Janta Colony", "Jhalana Doongri", "Sector 5", "Sector 1", "Sector 2", "Sector 3", "Sector 6", "Sector 7"}; 
      if (Arrays.asList(compare).contains(street) && address.equals("null")) { 
       int zip = Integer.parseInt("302004"); 
       address = String.valueOf(zip); 


      } 

     }} 
+0

ようAsyncTaskを使用することができますか?あなたは不確定のプログレスバーを持ち、進行中かどうかをチェックしたいのですか?あなたは不確定な手段を知っていますか? –

答えて

0

あなたはDialogを構築し、表示と退けるための参照を使用することができます。また、cancelableをfalseに設定する必要があります。

この

dialog = new MaterialDialog.Builder(MainActivity.this) 
      .title("Please Wait") 
      .content("Loading") 
      .progress(true, 0) 
      .titleColor(getResources().getColor(R.color.grey)) 
      .widgetColor(getResources().getColor(R.color.grey)) 
      .progressIndeterminateStyle(true) 
      .cancelable(false) 
      .build(); 

のようにあなたの方法address()はあなたがアンドロイドでバックグラウンド処理を行うためにAsyncTaskを必要とし、この

dialog.show(); 
// do logic 
dialog.dismiss(); 
0

ようになります。例:あなたのダイアログを呼び出すためにあなたの方法で次に

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> { 
    MaterialDialog dialog; 
    protected void onPreExecute() { 
     dialog = new MaterialDialog.Builder(MainActivity.this) 
      .title("Please Wait") 
      .content("Loading") 
      .progress(true, 0) 
      .titleColor(getResources().getColor(R.color.grey)) 
      .widgetColor(getResources().getColor(R.color.grey)) 
      .progressIndeterminateStyle(true) 
      .show(); 
    } 

    protected Long doInBackground(URL... urls) { 
     int count = urls.length; 
     long totalSize = 0; 
     for (int i = 0; i < count; i++) { 
      totalSize += Downloader.downloadFile(urls[i]); 
      publishProgress((int) ((i/(float) count) * 100)); 
      // Escape early if cancel() is called 
      if (isCancelled()) break; 
     } 
     return totalSize; 
    } 

    protected void onPostExecute(Long result) { 
     dialog.dismiss(); 
    } 
} 

new DownloadFilesTask().execute(url1, url2, url3); 

あなたのバックグラウンド・プロセスは、doInBackgroundメソッドになります。

+0

事は私が有効な結果を得るまで実行を続けるダイアログを進めたいです。 –

+0

私はgpsを通してユーザアドレストラッキングコードを含むこのアドレス関数を呼び出しています。今gpsはlat lngを計算する時間がかかっています。計算されるまでにこのプログレスダイアログが実行されていなければなりません。このコードは機能していますが、関数は最初にnull値を送信し、あなたはアドレスで非ヌル値を返す方法を教えてもいいですか? –

0

あなたは正確に何を意味するこの

private class LongOperation extends AsyncTask<String, Void, String> { 

    @Override 
    protected String doInBackground(String... params) { 

     //Call the address() method 

     return ""; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     //Stop showing your progress bar 
    } 

    @Override 
    protected void onPreExecute() { 
     //Start showing your progress bar 
    } 

} 
+0

私はgpsを通してユーザアドレストラッキングコードを含むこのアドレス関数を呼び出しています。今gpsは緯度経度を計算する時間がかかっています。計算されるまでは、このプログレスダイアログが実行されていなければなりません。このコードは機能していますが、関数は初めてnull値を送信し、あなたはアドレスで非ヌル値を返す方法を教えてもいいですか? –

+0

@HimanshuDaswaniアドレスが必要なフィールドである場合、ヌルアドレスを取得したときにonPostExecute()からgetAddress()を呼び出して、アドレスを取得するまで進行状況ダイアログを停止しないでください。 –

+0

私はAddress()を呼び出す必要があります。バックグラウンドで2回、ポスト実行でもう1回機能しますか? –

関連する問題