0

我試圖將數據鏈接到我的示例中的UI App。來自WPF背景,我的第一個選擇是DataBinding,但後來我發現它不是本機支持的AndroidXamarin.Android。當然,我可以使用一些擴展來做到這一點,但我寧願使用本地支持的東西,如Adapters。在例如ListView元素的情況下,我可以找到許多關於如何使用Adapters來填充數據的教程,但是我不知道我是否可以用這種方式將單個元素(例如,僅一個變量)鏈接到數據。Xamarin.Android:是否可以將數據中的非列表元素鏈接到UI?

爲了說明我的想法:一個非常簡單的示例項目就像使用'for'循環顯示Hello World 號碼次一樣。是否有可能使用適配器來實現這一點,或者我應該尋找更好的選擇?我寧願學習首先使用本地支持的東西,因爲我有一些與Xamarin.Android xp。非常感謝幫助!

回答

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返回你的ListView的循環次數,並在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"); 
    } 
} 
+0

謝謝,這看起來整潔!如果我有幾個UI元素,也可以使用類似的東西,對嗎?在這種情況下,數據端將是一個集合(一個數組或一個列表等),並且UI將具有一些TextView或Buttons。 – rTECH

+0

如果您有幾個UI元素,則需要更改被覆蓋的'GetView'方法。你可以參考[這個文檔](http://www.vogella.com/tutorials/AndroidListView/article.html#adapterown)。它沒有使用「IListAdapter」。但這個想法是一樣的。 –