在Xamarin Android

时间:2015-07-17 11:20:06

标签: xamarin

我遇到了问题,我工作了10天就无法解决。我为ListView的每一行做了一个布局。这个布局包含一个有一个TextView和一个的LinearLayout它里面的WebView。现在我需要一个C#项目,我可以随时使用新文本和url向ListView添加新行。例如:button.click {ListView.add(Resource.Layout.Items,"文字"," Url")} ..我知道这个命令是错误的。我想为你解决问题。 我知道它的自定义行布局,我在这个站点的其他站点和Xamarin站点上阅读了manny示例,关于它,适配器,......但是我无法做到。 :( 请正确回答我。 这对我来说非常重要。 非常感谢。

1 个答案:

答案 0 :(得分:0)

您需要创建一个可以将自定义对象作为项目使用的适配器。它可能如下所示:

public class MyAdapter : BaseAdapter<MyItem>
{
    readonly LayoutInflater inflater;
    List<MyItem> myItemList;

    public MyAdapter(Context context)
    {
        inflater = LayoutInflater.FromContext(context);
        myItemList = YOUR_DATASOURCE.GetMyItems();
    }

    public override MyItem this [int index]
    {
        get { return myItemList[index]; }
    }

    public override int Count
    {
        get { return myItemList.Count; }
    }

    public override long GetItemId(int position)
    {
        return position;
    }

    public override View GetView(int position, View convertView, ViewGroup parent)
    {
        View view = convertView ?? inflater.Inflate(Resource.Layout.MyItemLayout, parent, false);

        var item = myItemList[position];
        var viewHolder = view.Tag as MyViewHolder;

        if (viewHolder == null)
        {
            viewHolder = new MyViewHolder();
            viewHolder.Web = view.FindViewById<WebView>(Resource.Id.MyItemLayout_Icon);
            viewHolder.Name = view.FindViewById<TextView>(Resource.Id.MyItemLayout_Title);

            view.Tag = viewHolder;
        }

        viewHolder.Web.Url = item.Url; //You need to check how you have to set the url for a WebView
        viewHolder.Name.Text = item.Text;

        return view;
    }

    public override void NotifyDataSetChanged()
    {
        myItemList = YOUR_DATASOURCE.GetMyItems();

        base.NotifyDataSetChanged();
    }
}

class MyViewHolder : Java.Lang.Object
{
    public WebView Web { get; set; }

    public TextView Name { get; set; }
}

您使用ListView.Adapter = new MyAdapter(Activity);将适配器应用于ListView。每次更改按钮单击事件中的项目时,都会拖动(ListView.Adapter as MyAdapter).NotifyDataSetChanged();,这会强制适配器重新加载并刷新数据。

YOUR_DATASOURCE表示代码中存储所有项目的网址或文字等信息的位置。这通常可以是数据库或类似的东西。而GetMyItems()是一种查询数据库的方法。

希望这可以解决问题。