【问题标题】:binding json array response to row of list in listview in xamarin android将json数组响应绑定到xamarin android中listview中的列表行
【发布时间】:2016-03-25 16:36:08
【问题描述】:

我正在将响应中的 json 数据绑定到列表。

回应

[{
    "DDLValue":"home",
    "ID":2,
    "Msg":"Enough",
    "Status":2
}
  {
    "DDLValue":"palace",
    "ID":1,
    "Msg":"good",
    "Status":2
}]

我能够将上述 json 响应绑定到 ListView,但我想要包含单词“select”的第一行以及响应的所有后续行。

Mainactivity.cs

tableItems = new List<TableItem>();
var client = new RestClient("http://websites.net/");
var request = new RestRequest("Service/GetRegions", Method.POST);
request.RequestFormat = DataFormat.Json;
tableItems = client.Execute<List<TableItem>>(request).Data;

listView.Adapter = new HomeScreenAdapter(this, tableItems);
    protected void OnListItemClick(object sender, Android.Widget.AdapterView.ItemClickEventArgs e)
    {
                   string val;
        if (e.Position==0)
        { 
            region.Text = -select-;
        }
        else {


       var  t1 = tableItems[e.Position-1];
            val = t1.DDLValue;
            region.Text = val;
        }}

HomeScreenAdapter.cs

public class HomeScreenAdapter : BaseAdapter<TableItem> {
    List<TableItem> items;
    Activity context;
    public HomeScreenAdapter(Activity context, List<TableItem> items)
        : base()
    {

        this.context = context;
        this.items = items;
    }
    public override long GetItemId(int position)
    {
        return position;
    }
    public override TableItem this[int position]
    {
        get { return items[position]; }
    }
    public override int Count
    {
        get { return items.Count+1; }
    }
    public override View GetView(int position, View convertView, ViewGroup parent)
    {
        var item = items[position];

        View view = convertView;
        if (view == null) // no view to re-use, create new
            view = context.LayoutInflater.Inflate(Resource.Layout.CustomView, null);
        view.FindViewById<TextView>(Resource.Id.Text1).Text = item.DDLValue;

        return view;
    }
}

如何添加额外的第一行?

【问题讨论】:

    标签: c# android json xamarin


    【解决方案1】:
    public override View GetView(int position, View convertView, ViewGroup parent)
        {
            TableItem item;
    
            if (position == 0 {
              item = new TableItem { DDLValue = "Select" };
            } else {
              item = items[position - 1];
            }
    
            View view = convertView;
    
            if (view == null) // no view to re-use, create new
                view = context.LayoutInflater.Inflate(Resource.Layout.CustomView, null);
            view.FindViewById<TextView>(Resource.Id.Text1).Text = item.DDLValue;
    
            return view;
        }
    

    【讨论】:

    • 在列表视图中,第一行似乎是选择选项,但是当我单击特定列表行时,它会给出下一行的 TableItem 对象(我的意思是下一行的详细信息),当单击选择行时,它会给出数组输出债券例外。
    • 在您的列表单击事件处理程序中,您需要修改索引以说明列表开头的“空”项。
    • 谢谢 Jason。我确实使用了 if else 条件并检查位置零。请参阅我更新的答案。如果检查方式不正确,请纠正我。
    • 如果是这样,请不要修改 TableItems 数组。相反,只需设置值 region.Text = "-Select";您的 else 情况似乎是正确的。
    • 还有一个错误,TableItems 数组是 6,如果我在 listview 的第一行添加选择,tableitem 数组响应的最后一个对象没有绑定到 listview。
    猜你喜欢
    • 1970-01-01
    • 2020-11-09
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多