2016-09-26 128 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上设置一个属性,然后使用该值进行操作。