LemonteaのUnity部屋

C#とかのお話です~

Xamarin.Forms 待機中にぐるぐるを表示させる ProgressDialog

こんにちは。レモンティーです。

今回は、Xamarinで待ち時間にぐるぐる回るやつを表示させます。

普通Xamarin.Formsでぐるぐると言ったらActivityIndicatorですが
今回はネイティブのものをDependencyServiceで呼びます。
www.sawalemontea.com

さっそくやっていきます。

インターフェース内

共通のインターフェースにはこんな感じで書きます。
using System.Threading.Tasks; が必要です。

Task<T> WaitTask<T>(Task<T> task);

固有実装

そうしたらプラットフォームごとに実装していきます。

Android

AndroidではProgressDialogを使います。

  public async Task<T> WaitTask<T>(Task<T> task)
        {
           //ぐるぐる作成
            var prg = new ProgressDialog(Forms.Context);
            prg.SetTitle("処理中…");
            prg.SetMessage("現在処理中です。");
            prg.SetCancelable(false);
            prg.SetProgressStyle(ProgressDialogStyle.Spinner);
            //ぐるぐる表示
            prg.Show();
            //時間のかかる処理
            var result = await task;
            //ぐるぐるを閉じる
            prg.Dismiss();
            return result;
        }

使用

使うときはこのように呼び出します。

var result = await Dependencyservice.Get<ITest>.WaitTask<string>(Task.Run(async () => await GetTextAsync()));

GetTextAsynkの部分にぐるぐるを表示して待ちたい非同期メソッドを入れます。
その返り値に合わせて<string>の部分を変えます…が、これは省略可能です。

返り値が無い場合は、
インターフェースから全部<T>が無いバージョンを使えばOKです。


これで時間がかかる処理の間、画面が固まるのを避けつつ、
操作は待ってもらうことができます。
じゃないと使ってるときに急に固まったら
バグったみたいに見えちゃいますからね。

今回はこれでおしまいです。
www.sawalemontea.com