Android OnActivityResult not being called (C#, Xamarin)

本文关键字:Xamarin called OnActivityResult not being Android | 更新日期: 2023-09-27 18:23:56

我遇到了一个非常有趣的问题。让我强调一下,我没有为android编程太多,看起来我可能在某个地方偏离了轨道。

我的问题是触发事件onActivityResult()。我看过Xamarin的收据,但不知怎么的,它不起作用。在MainActivity中不会调用例程。

我甚至试着在java上做一个类似的例子,在那里它就像一个魅力。

所以,现在谈正事。我有一个MainActivity,它可以启动配置活动。该活动应该从服务器收集IP(用户手动将其放入),并将String返回给MainActivity。公平而简单。

MainActivity代码片段:

[Activity(Label = "Test", MainLauncher = true, Icon = "@drawable/ax")]
public class MainActivity : Activity
{
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        SetContentView(Resource.Layout.Main);
        setBindigs();
    }
    protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
    {
        base.OnActivityResult(requestCode, resultCode, data);
        switch (resultCode)
        {
            case Result.Ok:
                //do something
                break;
        }
    }
    private void setBindigs()
    {
        ImageView ax = FindViewById<ImageView>(Resource.Id.ax);
        ax.Click += HandleImageClick;
    }
    private void HandleImageClick(object sender, EventArgs e)
    {
        var conf = new Intent(this, typeof(Configuration));
        StartActivityForResult(conf, Convert.ToInt32(Result.Ok));
    }

配置片段:

 [Activity(Label = "Configuration")]
public class Configuration : Activity
{
    private Button[] Connects;
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        SetContentView(Resource.Layout.Configuration);
        setBindigs();
    }
    private void setBindigs()
    {
        const int KeyboardLength = 2;
        Connects = new Button[KeyboardLength];
        for (int I = 0; I < KeyboardLength; ++I)
        {
            Connects[I] = FindViewById<Button>(Resource.Id.ConnectButton + I);
            Connects[I].Click += HandleKeyboardClick;
        }
    }
    private void HandleKeyboardClick(object sender, EventArgs e)
    {
        Button Clicked = sender as Button;
        Result ActivityResult = Result.Ok;
        String IpText = String.Empty;
        switch(Clicked.Id)
        {
            case Resource.Id.ConnectButton:
                EditText IP = FindViewById<EditText>(Resource.Id.ServerIP);
                IpText = IP.Text;
                break;
            case Resource.Id.DisconnectButton:
                ActivityResult = Result.Canceled;
                break;
        }
      Intent myIntent = new Intent (this, typeof(MainActivity));
      myIntent.PutExtra ("IP", IpText);
      SetResult (Result.Ok, myIntent);
      Finish();
    }

你有什么想法吗?在java中,我使用了选项getIntent();而不是Intent myIntent = new Intent (this, typeof(MainActivity));

Android OnActivityResult not being called (C#, Xamarin)

我刚刚在代码中发现了这个问题。为了将来参考,这里似乎是问题所在:

调用StartActivityForResult()时,我使用了参数StartActivityForResult(conf, Convert.ToInt32(Result.Ok));。似乎预期的结果不应该作为Convert.ToInt32(Result.Ok)传递,而应该作为0传递。

这解决了我的问题