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

时间:2017-03-16 17:33:06

标签: c# android xamarin.android android-adapter visual-studio-2017

我正在尝试将数据链接到我的示例应用中的用户界面。来自WPF背景,我的第一选择是DataBinding,但后来我发现它在 Android Xamarin.Android中不受原生支持。当然,我可以使用一些扩展来做到这一点,但我宁愿使用本机支持的东西,比如Adapters。在例如ListView元素的情况下,我可以找到许多关于如何使用Adapters用数据填充它们的教程,但我不知道我是否可以链接单个元素(例如,只有一个变量)以这种方式获得数据。

为了说明我的想法:一个非常基本的示例项目就像提示用户输入一个数字而不是使用'for'循环显示Hello World number 次。是否可以使用适配器来实现这一点,或者我应该寻找更好的替代方案?我宁愿学习首先使用本机支持的东西,因为我的{x}只有Xamarin.Android。非常感谢帮助!

1 个答案:

答案 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");
    }
}