显示数据monodroid列表视图(从monotouch移植)

时间:2014-01-30 14:01:22

标签: android sqlite android-listview xamarin.ios xamarin.android

如果您还记得来自xamarin样本的任务演示,我们可以将任务(如id,title,sub)与

连接起来
TableView.Source = new RootTableSource(tasks.ToArray ());

在monodroid中,它有点复杂。我使用sqlite,这里是我的monotouch sqlite代码

{
    sqlCom.CommandText="SELECT * FROM Personel";

    using (SqliteDataReader dbReader = sqlCom.ExecuteReader ())
    {
        if (dbReader.HasRows)
        {
            int i;
            // Advance through each row
            tasks = new List<TaskX> ();
            while (dbReader.Read ())
            {     
                TaskX dtask= new TaskX() {Id = Convert.ToInt16( dbReader["ID"]), 
                    Name = String.Format (Convert.ToString (dbReader["UserName"])),
                    Notes=String.Format ( Convert.ToString (dbReader["Password"])),
                    Done=false};
                tasks.Add(dtask);
            };
        }
    };
    TableView.Source = new RootTableSource(tasks.ToArray ());
}

我注意到代码行采用了源值

protected override void OnResume ()
{
    base.OnResume ();

    this._tasks = Tasky.BL.Managers.TaskManager.GetTasks();

    // create our adapter
    this._taskList = new Adapters.TaskListAdapter(this, this._tasks);

    //Hook up our adapter to our ListView
    this._taskListView.Adapter = this._taskList;
}

是否可以在android列表视图中显示sqlite值,如id,username?感谢

1 个答案:

答案 0 :(得分:3)

在Android上,您必须创建自定义适配器。查看此documentation at Xamarin,尤其是引用自定义行视图部分。

您必须继承BaseAdapter,如

public class TaskAdapter : BaseAdapter<Task>
{
public override View GetView(int position, View convertView, ViewGroup parent)
   {
       var task = items[position];
   }
}

重要的部分是GetView,您可以在其中访问任务列表,然后填充视图并返回:

View view = convertView;
if (view == null) // no view to re-use, create new
view = context.LayoutInflater.Inflate(Resource.Layout.YourTaskView, null);
view.FindViewById<TextView>(Resource.Id.TaskId).Text = task.Id.ToString();

如果您从数据库中返回了大量任务,请务必查看CursorAdapter