【问题标题】:Xamarin : Using ArrayAdapter in an Android FragmentXamarin:在 Android 片段中使用 ArrayAdapter
【发布时间】:2014-11-27 09:28:25
【问题描述】:

我正在尝试使用 ArrayAdapter 来填充位于 Fragment 中的 Spinner 视图,如下所示

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        var view = inflater.Inflate(Resource.Layout.SalaryDefinition, container, false);

        spnBanks = view.FindViewById<Spinner>(Resource.Id.spinner1);

        spnBanks.Adapter = new ArrayAdapter<string>(CONTEXT, Resource.Layout.SalaryDefinition, Sections);

        return view;
    }

问题是我找不到要传递给 ArrayAdapter 构造函数的上下文。

知道如何解决这个问题,或者通常在 Fragment 中填充 Spinner 视图吗?

【问题讨论】:

  • 这个问题你解决了吗???
  • 不,我必须避免碎片在一起才能克服它。
  • 你有什么选择??
  • 替代方案很大程度上取决于您使用片段的上下文。

标签: android xamarin fragment spinner android-arrayadapter


【解决方案1】:

Fragment 具有 getActivity 方法,该方法返回与此片段当前关联的 Activity。用它代替CONTEXT

【讨论】:

  • 我使用的是 Xamarin,而不是 java。
  • 基本概念不变。您应该有可能访问托管片段的活动
  • fragment.Activity 提供Fragment 的父或持有人活动。不同之处在于java的一些getset方法在c#(在xamarin中)中用作property,尽管如果我没记错的话,java中的所有getter和setter都可以用作[access_specifier] [type] property_name {get; set;}在 C# 中。
  • 您可以在 C# 的情况下使用 this.Activity 来获取 parentholding 活动。
【解决方案2】:

您在OnCreateView 中唯一应该做的就是创建布局并将其返回。

OnActivityCreated 中创建适配器会更好,您可以在其中访问this.Activity 以获取承载Fragment 的Activity。然后可以将 Activity 用作 Context。

【讨论】:

  • 什么?不。在调用 onAttach 之后附加 Fragment,这发生在 OnCreateView 之前
  • 是的,我的错。删了。
  • 我曾尝试在 OnCreateView 和 OnActivityCreated 事件中使用 this.Activity,但它会使应用程序崩溃!
  • 它不会抛出任何异常,它只是给我“不幸的是 App1 已停止!”消息并关闭应用程序。
  • 有解决办法吗?
【解决方案3】:

创建一个

私有上下文上下文;

在您的 OnCreateView 中,执行以下操作:

context = container.Context;

最后将适配器中的 CONTEXT 替换为“context”。

【讨论】:

    【解决方案4】:

    完成此操作后,following 工作正常。我在方法 OnCreateView 和 OnActivityCreated 中提供了一个示例

    http://davidyardy.com/archive/xamarin-listviews/

    【讨论】:

      【解决方案5】:

      使用 this.Activity.BaseContext

      spnBanks.Adapter = new ArrayAdapter<string>(this.Activity.BaseContext, Resource.Layout.SalaryDefinition, Sections);
      

      【讨论】:

        【解决方案6】:

        @Sisyphus 我想我意识到了你的问题 :) 因为你从片段继承,你不能使用通常的方法。 您将看到一个 **...is not assignable to parameter 以键入“android.app.activity”** 错误消息。 您应该使用以下方法:

        spnBanks.Adapter = new ArrayAdapter<string>(this.Activity,  Resource.Layout.SalaryDefinition, Sections);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-08-30
          • 1970-01-01
          • 2017-06-30
          • 1970-01-01
          • 2018-01-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多