Xamarin.Android: 是否可以将数据中的非列表元素link UI?

Xamarin.Android: Is it possible to link a non-list element in data to UI?

我正在尝试将 link 数据传输到示例 App 中的 UI。来自 WPF 背景,我的第一选择是 DataBinding,但后来我发现它在 AndroidXamarin.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");
    }
}