【问题标题】:MutableLiveData Object Creation in Xamarin AndroidXamarin Android 中的 MutableLiveData 对象创建
【发布时间】:2020-10-26 19:44:45
【问题描述】:

我是在 Xamarin Android 中开发应用程序的新手。我使用 nuggets 集成了 AndroidX.lifeCycle。我知道如何创建一个对象 private MutableLiveData currentName = new MutableLiveData(); 在 java 安卓中。但很难在 Xamarin Android 中创建对象。任何人都知道如何在 Xamarin Android 中使用 LiveData

【问题讨论】:

  • 你在 Xamarin Android 中使用 LiveData 成功了吗?

标签: xamarin.android


【解决方案1】:

您应该先安装Xamarin.Android.Arch.Lifecycle.LiveDatanuget.Package,右键单击您的Xamarin.Android项目并选择Manage Nuget Packages..,然后搜索并安装它,如下图所示:

然后在你的项目中,使用命名空间和代码:

using Android.Arch.Lifecycle;

MutableLiveData currentName = new MutableLiveData();

更新

public class MainActivity : AppCompatActivity
{

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        MutableLiveData currentName = new MutableLiveData();
        currentName.SetValue("321");

        mylifeCycle lifeCycle = new mylifeCycle();
        mylObserver obsever = new mylObserver();

        currentName.Observe(lifeCycle, obsever);
    }
}


public class mylifeCycle : ILifecycleOwner
{
    public Lifecycle Lifecycle => throw new NotImplementedException();

    public IntPtr Handle => throw new NotImplementedException();

    public void Dispose()
    {
        throw new NotImplementedException();
    }
}

public class mylObserver : IObserver
{
    public IntPtr Handle => throw new NotImplementedException();

    public void Dispose()
    {
        throw new NotImplementedException();
    }

    public void OnChanged(Java.Lang.Object p0)
    {
        throw new NotImplementedException();
    }
}

【讨论】:

  • 我已经是 nugget 包了,但是要使用泛型 MuatableliveData>
  • 在java中我们将在私有MutableLiveData currentName中创建对象;我需要在 xamarin 中创建同样的方式你有没有这个想法对象
  • 你在 Xamarin Android 中的 AndroidX 分页库工作过吗
  • MutableLiveData currentName 是什么意思?你能告诉我完整的java代码吗?
【解决方案2】:

我认为这种混淆是由 Xamarin API 引用 java 对象这一事实引起的。

当我创建分离类来实现 IObserver 时,我必须实现很多方法。但是在您的代码中注意到您只需覆盖两个方法。 ?

那是因为 IObserver 是一个 java 接口。如果你继承自 Java.Lang.Object 那么你只需要实现一个方法:

    class MyObserver : Java.Lang.Object, IObserver
    {
        public void OnChanged (Java.Lang.Object o)
        {
        }
    }

或者,您可以在已经从 Java.Lang.Object 继承的现有类中实现 IObserver,例如你的适配器类。

你知道如何将 C# 对象转换为 java.lang.object 吗?

我认为您指的是正在观察的 LiveData 对象是 Java.Lang.Object 的事实。

就我而言,我想观察一个 C# 对象,特别是 System.Collections.Generic.List。但这是不允许的,因为无法在 System object 和 Java object 之间进行转换。

我的解决方案是使用 Android.Runtime.JavaList 对象。这是一个 Java 对象并且实现了 System.Collections.Generic.IList,所以我不必深入研究 Java 类层次结构,我只使用了 C# IList 方法。

恕我直言,我们需要使用 java 对象这一事实表明这是 Xamarin 团队没有优先考虑的领域。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2017-10-13
    相关资源
    最近更新 更多