2016-09-26 95 views
-1

我的應用程序中有一個嵌入式jar庫。在OnCreate方法中,我必須在我的代碼中實例化庫。沒有其他方式可以使用這個庫。 處理程序將被調用,並且消息的結果可用,但一旦可用,就沒有機會將ValueFromHandler的值返回給方法OnCreate。 我的問題是:有沒有人有一個小代碼片斷,看看如何處理程序應該看起來像哪些需要返回值調用者?從Handler獲取價值

這是我的代碼:

public class MainActivity : Activity{ 
JarLibrary jarlib; 

protected override void OnCreate(Bundle bundle) 
{ 
    base.OnCreate(bundle);   
    SetContentView(Resource.Layout.Main); 
    jarlib = new JarLibrary(this, new JarHandler(), null); 

    jarlib.Run(ValueFromHandler) //Here I would need the value back from the handler 

}} 

public class JarHandler : Handler 
{ 
    public override void HandleMessage(Message msg) 
    { 
     switch (msg.What) 
     { 
      case jarlib.MessageStateChange: 
       if (msg.Arg1 == jarlib.StateReadyToRun) 
       { 
        ValueFromHandler = msg.Obj; 
        Console.WriteLine(ValueFromHandler); //Once this value "msg.Obj" is available I need to bring it back to the caller (On Create) 
        Toast.MakeText(Application.Context, "Ready to run", ToastLength.Short).Show(); 
       } 
       break; 
     } 
    } 
} 
+0

「ValueFromHandler」聲明在哪裏?讓它成爲全球可能? –

+0

使其全球不起作用 – ildasm

+0

這是豐富的..爲什麼它不工作? –

回答

0

你可以選擇有一個回調Action當您收到消息:

public class MainActivity : Activity 
{ 
    JarLibrary jarlib; 

    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle);   
     SetContentView(Resource.Layout.Main); 
     var handler = new JarHandler(); 
     jarlib = new JarLibrary(this, handler, null); 

     handler.OnHandleMessage = (s, o) => { 
      jarlib.Run(o); 
     }; 
    } 

    public class JarHandler : Handler 
    { 
     public Action<object> OnHandleMessage; 

     public override void HandleMessage(Message msg) 
     { 
      switch (msg.What) 
      { 
       case jarlib.MessageStateChange: 
        if (msg.Arg1 == jarlib.StateReadyToRun) 
        { 
         OnHandleMessage?.Invoke(this, msg.Obj); 

         Console.WriteLine(ValueFromHandler); //Once this value "msg.Obj" is available I need to bring it back to the caller (On Create) 
         Toast.MakeText(Application.Context, "Ready to run", ToastLength.Short).Show(); 
        } 
        break; 
      } 
     } 
    } 

你也能做到這一點不同,在MainActivity傳遞作爲參數您的JarHandler類的構造函數。然後在MainActivity上設置一個屬性,然後使用該值進行操作。