Xamarin.Android: 是否可以将数据中的非列表元素link UI?
Xamarin.Android: Is it possible to link a non-list element in data to UI?
我正在尝试将 link 数据传输到示例 App 中的 UI。来自 WPF 背景,我的第一选择是 DataBinding
,但后来我发现它在 Android 或 Xamarin.Android
中不受原生支持.当然,我可以使用一些扩展来做到这一点,但我宁愿使用一些本机支持的东西,比如 Adapters
。对于例如 ListView
元素,我可以找到许多关于如何使用 Adapters
向它们填充数据的教程,但我不知道我是否可以 link 单个元素(例如,只有一个变量)以这种方式传输数据。
为了说明我的想法:一个非常基本的示例项目类似于提示用户输入数字,而不是使用“for”循环显示 Hello World number 次.是否可以使用适配器来完成此操作,或者我应该寻找更好的选择?我宁愿先学习使用原生支持的东西,因为我对 Xamarin.Android
的经验很少。非常感谢您的帮助!
To illustrate what I have in mind: a very rudimentary sample project would be something like prompt the user for a number than display Hello World number times using a ´for´ loop. Is it possible to accomplish this using adapters, or I should look for a better alternative?
是的,可以使用适配器完成此操作。但不是使用默认适配器,而是使用如下自定义适配器:
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
return 列表视图的循环编号,在 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");
}
}
我正在尝试将 link 数据传输到示例 App 中的 UI。来自 WPF 背景,我的第一选择是 DataBinding
,但后来我发现它在 Android 或 Xamarin.Android
中不受原生支持.当然,我可以使用一些扩展来做到这一点,但我宁愿使用一些本机支持的东西,比如 Adapters
。对于例如 ListView
元素,我可以找到许多关于如何使用 Adapters
向它们填充数据的教程,但我不知道我是否可以 link 单个元素(例如,只有一个变量)以这种方式传输数据。
为了说明我的想法:一个非常基本的示例项目类似于提示用户输入数字,而不是使用“for”循环显示 Hello World number 次.是否可以使用适配器来完成此操作,或者我应该寻找更好的选择?我宁愿先学习使用原生支持的东西,因为我对 Xamarin.Android
的经验很少。非常感谢您的帮助!
To illustrate what I have in mind: a very rudimentary sample project would be something like prompt the user for a number than display Hello World number times using a ´for´ loop. Is it possible to accomplish this using adapters, or I should look for a better alternative?
是的,可以使用适配器完成此操作。但不是使用默认适配器,而是使用如下自定义适配器:
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
return 列表视图的循环编号,在 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");
}
}