我正在尝试将数据链接到我的示例应用中的用户界面。来自WPF背景,我的第一选择是DataBinding
,但后来我发现它在 Android 或Xamarin.Android
中不受原生支持。当然,我可以使用一些扩展来做到这一点,但我宁愿使用本机支持的东西,比如Adapters
。在例如ListView
元素的情况下,我可以找到许多关于如何使用Adapters
用数据填充它们的教程,但我不知道我是否可以链接单个元素(例如,只有一个变量)以这种方式获得数据。
为了说明我的想法:一个非常基本的示例项目就像提示用户输入一个数字而不是使用'for'循环显示Hello World number 次。是否可以使用适配器来实现这一点,或者我应该寻找更好的替代方案?我宁愿学习首先使用本机支持的东西,因为我的{x}只有Xamarin.Android
。非常感谢帮助!
答案 0 :(得分:1)
为了说明我的想法:一个非常基本的示例项目就像提示用户输入一个数字而不是使用'for'循环显示Hello World数字时间。是否可以使用适配器来实现这一点,或者我应该寻找更好的替代方案?
是的,可以使用适配器完成此操作。但不是使用默认适配器,而是使用下面的自定义适配器:
public class MyListAdapter : Java.Lang.Object,IListAdapter
{
public int Count {
get {
//list view will show 10 lines of data
return 10;
}
}
public bool HasStableIds { get { return false; } }
public bool IsEmpty { get { return false; } }
public int ViewTypeCount { get { return 1; } }
private Context context;
private string uniqueData;
//default constructor
public MyListAdapter()
{ }
//constructor with current context and the data you want to show in your listview
public MyListAdapter(Context c,string data)
{
context = c;
uniqueData = data;
}
public bool AreAllItemsEnabled()
{
return true;
}
public void Dispose()
{
this.Dispose();
}
public Java.Lang.Object GetItem(int position)
{
throw new NotImplementedException();
}
public long GetItemId(int position)
{
return 0;
}
public int GetItemViewType(int position)
{
return 1;
}
public View GetView(int position, View convertView, ViewGroup parent)
{
View et=convertView;
if (et == null)
{
et = new TextView(context);
(et as TextView).Text = uniqueData;
}
return et;
}
public bool IsEnabled(int position)
{
return true;
}
public void RegisterDataSetObserver(DataSetObserver observer)
{
}
public void UnregisterDataSetObserver(DataSetObserver observer)
{
}
}
如您所见,Count.get
返回列表视图的循环编号,并在GetView
中以编程方式创建了TextView
,它获取了构造函数传递的字符串数据。
因此我可以像下面这样使用它:
public class MainActivity : Activity
{
ListView myListView;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main);
myListView = FindViewById<ListView>(Resource.Id.MyListView);
myListView.Adapter=new MyListAdapter(this,"this is my custom data");
}
}