爲了說明我的想法:一個非常基本的示例項目就像提示用戶輸入一個數字,而不是使用'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");
}
}
謝謝,這看起來整潔!如果我有幾個UI元素,也可以使用類似的東西,對嗎?在這種情況下,數據端將是一個集合(一個數組或一個列表等),並且UI將具有一些TextView或Buttons。 – rTECH
如果您有幾個UI元素,則需要更改被覆蓋的'GetView'方法。你可以參考[這個文檔](http://www.vogella.com/tutorials/AndroidListView/article.html#adapterown)。它沒有使用「IListAdapter」。但這個想法是一樣的。 –