Xamarin android:如何在像asp.net这样的android中获取GridView数据源

时间:2014-04-28 05:42:25

标签: android android-gridview xamarin-studio

我有一个WebService,它返回用户详细信息,例如用户名,出生日期和地址。我将此Web服务称为 Android应用程序开发 Xamarin c#。但不知道如何在网格视图中显示数据(绑定数据)。有人可以提供示例代码或解释如何在网格视图中显示数据。

1 个答案:

答案 0 :(得分:2)

您需要做的是为GridView和axml布局(GridView中的组件视图)创建适配器。例如,假设你想制作一个蓝色背景的瓷砖GridView,左下角的文字是白色的:

<强> tile.axml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tile_layout"
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:background="#0000FF">

    <TextView
        android:id="@+id/tile_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:paddingLeft="6dp"
        android:paddingBottom="2dp"
        android:textColor="#ffffff" />

</RelativeLayout>

<强> TileAdapter.cs

public class TileAdapter : BaseAdapter<BaseTileItem>
    {
        protected Activity _context = null;
        protected List<BaseTileItem> _tileList = new List<BaseTileItem>();


        public TileAdapter(Activity context, List<BaseTileItem> tileList)
            : base()
        {
            this._context = context;
            this._tileList = tileList;


        }


        public override BaseTileItem this[int position]
        {
            get { return this._tileList[position]; }
        }


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

        public override int Count
        {
            get { return this._tileList.Count; }
        }


        /// Inflates the Tile layout and sets the values
        public override Android.Views.View GetView(int position, Android.Views.View convertView, Android.Views.ViewGroup parent)
        {

            // Get our object for this position
            var item = this._tileList[position];

            //Try to reuse convertView if it's not  null, otherwise inflate it from our item layout
            var view = (convertView ??
                    this._context.LayoutInflater.Inflate(
                    Resource.Layout.tile,
                    parent,
                    false)) as RelativeLayout;

            // Find references to each subview in the list item's view
            TextView itemText = view.FindViewById<TextView>(Resource.Id.tile_text);

            //Assign this item's values to the various subviews
            itemText.Text = this._tileList[position].Text;

            //Finally return the view
            return view;
        }
    }
}

<强> TileBaseItem.cs

//This is what you retrieve from the webservice 
public class BaseTileItem
{

    private string _text;


    public BaseTileItem(string text)
    {
        this._text = text;
    }

    public string Text {
        get {return  this._text; }
        set { this._text = value; }
    }

然后在你的活动中:

private List<BaseTileItem> _usersList;
private TileAdapter _usersAdapter;
private GridView _usersGridView;

protected override void OnCreate(Bundle bundle)
{
    base.OnCreate(bundle);

    this.SetContentView(Resource.Layout.startactivity);



    //inflate all views
    InflateViews();


    this._usersList = //populate the list with BaseTileItem items
    this._usersAdapter = new TileAdapter(this, this._usersList);

    //creating the GridView
   this._usersGridView = new GridView(this);
   this._usersGridView.SetNumColumns(2);
   this._usersGridView.SetGravity(GravityFlags.Center);
   this._usersGridView.SetPadding(0, 20, 0, 20);
   this._usersGridView.SetVerticalSpacing(20);
   this._usersGridView.Adapter = this._usersAdapter;
}