【问题标题】:Bind Android Spinner with Http reponse data (json) in Xamarin在 Xamarin 中将 Android Spinner 与 Http 响应数据 (json) 绑定
【发布时间】:2020-08-12 12:44:03
【问题描述】:

我正在学习 xamarin android。我遇到了一些奇怪的事情。

通常我想将我的 android spinner 与我从 webapi 中提取的 json 数据绑定。我写了这段代码。

 var spinner = FindViewById<Spinner>(Resource.Id.RouteSelect);

        string url = "http://localhost/api/android/pullroutes";
        JsonValue json = await FetchWeatherAsync(url);
        string temp = "";
        for (int i = 0; i < json.Count; i++) {
            //temp += json[i]["name"].ToString();
            temp += json[i]["name"].ToString() ;
        }


        var items = new List<string>() { temp };
        var adapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleSpinnerItem, items);
        spinner.Adapter = adapter;

但它以文本形式显示微调器中的数据,但不像下拉样式。

Android Spinner View

我写错了什么?

【问题讨论】:

    标签: c# android json xamarin.android


    【解决方案1】:
    string temp = "";
    ArrayList items = new ArrayList();
    
    for (int i = 0; i < json.Count; i++) {
        temp = json[i]["name"].ToString();
        items.Add(temp);
    }
    
    var adapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleSpinnerItem, items);
    spinner.Adapter = adapter;
    

    你看出区别了吗? 你在temp 中有一个长字符串,因为你正在做+=

    每个String 都必须作为一个项目添加到ArrayList。您现在拥有的是一个 List,其中包含一个项目,并且该项目包含一个长字符串。

    注意:我给出的答案基于 Java。我知道这是 Xamarin/C#,但你应该可以做类似的事情。

    【讨论】:

    • @th3par3l 谢谢你的回答。 'var items = new List() { temp };'我写了这一行以添加到列表中。我是否必须再次将它们添加到另一个数组?请帮我理解清楚:)
    • @KhaledMd.TuhidulHossain 您要添加的是列表中的一项,因为temp 只是一项。您必须创建它的一个新实例并将其添加到 for 循环中的列表中。我的例子应该有效。试试看
    【解决方案2】:
    ArrayList items = new ArrayList();
    

    var adapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleSpinnerItem, items);
    

    从那 2 行发现错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多