質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

解決済

1回答

1772閲覧

Xamarin.Forms/PrismでOnActivityResultの処理中にロード画面を表示したい

taichaso

総合スコア22

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

0クリップ

投稿2018/06/01 07:23

前提・実現したいこと

現在Xamarin.FormsでAndroidアプリの開発を行っています。
DependencyServiceからギャラリーを開き、画像に対してOnActivityResultを使って処理を行っています。

そこで、その処理を行っている間にActivityIndicatorを表示したいと考えています

発生している問題・エラーメッセージ

C#

1### HogeViewModel.cs 2HogeCommand = new DelegateCommand(() => { 3 try { 4 activityIndicator.IsRunning = true; 5 6 //ここでギャラリーを表示&OnActivityResultで重い処理 7 Xamarin.Forms.DependencyService.Get<HogeService>().Fuga(); 8 } 9 finally{ 10 activityIndicator.IsRunning = false; 11 } 12}

こちらのようなソースを記入したのですがギャラリーを開いた瞬間にfinallyに流れてしまい希望通りの処理が行われませんでした。

どこかでフラグを立ててOnActibityResultの処理が終わった後に値を変更すればできると思うのですがどのようにすればよいかがよく分からずに質問させていただきました。
また、このような処理を検索しようにも検索方法がわかりませんでした。

補足情報(FW/ツールのバージョンなど)

Xamarin.Forms 2.5.0.122203
Prism.Unity 7.0.0.396

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

fuge()の引数でOnActivityResult時に呼び出すコールバックを設定するようにしてはどうでしょうか?

C#

1Xamarin.Forms.DependencyService.Get<HogeService>().Fuga(() => activityIndicator.IsRunning = false);

Fugeの引数で指定したコールバックは、OnActivityResult時に発火するイベントに登録したメソッド内で、呼び出されるようにします。
以下に簡単なものですが、コードを載せておきます。

C#

1public class HogeService 2{ 3 private Action _callback; 4 5 public void Fuge(Action callback) 6 { 7 //まだ終わっていなければ、何もしない 8 if (_callback != null) return; 9 10 _callback = callback; 11 12 //イベントの登録 13 MainActivity.Instance.ActivityResultCalled += OnActivityResultCalled; 14 15 //ギャラリー表示 16 } 17 18 private void OnActivityResultCalled(object sender, EventArgs e) 19 { 20 //イベントの解除 21 MainActivity.Instance.ActivityResultCalled -= OnActivityResultCalled; 22 23 _callback?.Invoke(); 24 _callback = null; 25 } 26}

C#

1public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity 2{ 3 internal static MainActivity Instance { get; private set; } 4 5 //OnActivityResult時に呼ばれるイベント 6 public event EventHandler ActivityResultCalled; 7 8 protected override void OnCreate(Bundle bundle) 9 { 10 Instance = this; 11 12 //省略 13 } 14 15 protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) 16 { 17 base.OnActivityResult(requestCode, resultCode, data); 18 19 //画像の処理 20 21 //イベントの発火 22 ActivityResultCalled?.Invoke(this, EventArgs.Empty); 23 } 24}

投稿2018/06/07 16:06

f-miyu

総合スコア1625

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taichaso

2018/06/19 02:23

返答遅れてしまい申し訳ございません こちらのソースを参考にして実装してみたいと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問