c# - Android OnActivityResult 未被调用(C#、Xamarin)

标签 c# android xamarin

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

我的问题是事件 onActivityResult() 的触发。我已经阅读了 Xamarin 收据,但不知何故它不起作用。该例程不会在 MainActivity 中被调用。

我什至尝试在 java 上做一个类似的例子,而且效果非常好。

那么,现在进入正题。我有一个 MainActivity,它可以启动 Configuration Activity。此 Activity 应该从服务器收集 IP(用户手动输入),并将字符串返回给 MainActivity。公平而简单。

MainActivity 代码 fragment :

[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));

    }

和配置 fragment :

 [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));

最佳答案

我刚刚在我的代码中发现了问题。为了将来引用,这似乎是问题所在:

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

这解决了我的问题

关于c# - Android OnActivityResult 未被调用(C#、Xamarin),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33848978/

相关文章:

android - Xamarin,覆盖自定义渲染器中的焦点更改会阻止发生焦点事件

c# - P/Invoke 声明不应是安全关键的

android - 所有 Activity 的自定义工具栏未按预期工作?

android - 检查 Google App Invites 的可用性

android - 注入(inject)默认字体

android - 带有彩色行的 Mvvmcross ListView

c# - ASP.NET MVC 应用程序在 Ajax 请求上使用 Kendo Chart 和大数据源?

c# - 对于数据库键由多列组成的对象,最合适的设计是什么?

c# - 悬停事件错误触发

android - 如何让我的应用程序响应来自特定号码的短信