0

MonoTouch.Dialogに、ActivityElementを使用しようとするアプリがあります。

私の計画は、最初にアクティビティ要素を表示し、次にWebサービス呼び出しを行い、応答を受け取ったら、アクティビティ要素を削除し、代わりにいくつかの新しい文字列要素を追加することでした。これは動作しません。ビューが表示された後、要素を削除または追加できません。

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

rootElement = new RootElement ("Mobile Servicedesk"){
                (requestSection = new Section ("My requests"){
                    new ActivityElement()
                })
            };
            new Thread (() => {
                var incidents = IncidentProvider.LoadMyRequests ();
                requestSection.Elements.Clear ();
                foreach (var item in incidents) {
                    requestSection.Elements.Add (new StringElement(item.Name))
                }
            }
            ).Start ();

編集:

OK、これで、ソリューションの少なくとも一部で、更新部分が解決されました。

InvokeOnMainThread (() => {
                    ReloadData();
                });

ReloadData()はappDelegateビューでは機能しますが、サブビューでは機能しません。私はそれがメインスレッドで呼び出されることを確認しようとしましたが、それでも運がありません...

どんな助けでもいただければ幸いです!

4

2 に答える 2

1

これは、あなたがやりたいことを正確に実行するためにアプリで使用したコードです。

LoadingView loading;

ThreadPool.QueueUserWorkItem ((f) => {
    // runs UI stuff on main thread
    InvokeOnMainThread (delegate {
        loading = new LoadingView();    
        loading.Show("Do something...");
    });

    // Methods that do whatever you wan, that runs on a different thread
    DoSomething();

    // runs UI stuff on main thread
    InvokeOnMainThread (delegate { 
        loading.Hide();
        new UIAlertView("Title", "Message", null, "Button", null).Show();
    }); 
});

あなたの主な問題は、あなたがそうするとき、あなたはnew Thread(...)あなたのUIを編集したいということです、これがメインスレッドの外にあるならそれは不可能です。

私の例では、このDoSomething()メソッドでは、Webサービスを呼び出し、データをストックしてから、InvokeMainThread表示する方法でルートを作成できます。

于 2012-09-07T12:35:14.617 に答える
0

ああ!とった!

2番目のRootElementがあったので、その特定のルートでReloadDataを呼び出す必要がありました...これで機能します!

于 2012-09-24T20:26:40.533 に答える