我正在使用 Xamarin Studio 来开发Android应用。
该应用应在lvRes
(ListView)中生成50个条目。
我的下面的代码示例除了第一次尝试外完全正常。
FindViewById<Button>(Resource.Id.bnCalc)
.Click += (object sender, EventArgs e) => new Java.Lang.Thread(() => {
ListView lvRes = FindViewById<ListView>(Resource.Id.lvRes);
ArrayAdapter res = new ArrayAdapter(lvRes.Context, Android.Resource.Layout.SimpleListItem1);
lvRes.Adapter = res;
ulong a = 1;
ulong b = 1;
ulong tmp;
int step = 0;
while (++step <= 50 && (tmp = a + b) < ulong.MaxValue) {
res.Add(tmp.ToString());
a = b;
b = tmp;
}
}).Start();
首次点击bnCalc
(按钮)后,lvRes
只获得一个条目。
每次点击bnCalc
后,每次点击lvRes
都会有50个条目。
答案 0 :(得分:0)
@ User3805967说,这可能是一个UI问题。所以我设置一个断点来检查,如果while循环工作。循环就像它应该的那样工作。所以我在生成所有数字后尝试将ArrayAdapter传递给ListView。而且效果很好。现在我的代码如下所示:
FindViewById<Button>(Resource.Id.bnCalc)
.Click += (object sender, EventArgs e) => new Java.Lang.Thread(() => {
ulong a = 1;
ulong b = 1;
ulong tmp;
int step = 0;
ListView lvRes = FindViewById<ListView>(Resource.Id.lvRes);
ArrayAdapter res = new ArrayAdapter(lvRes.Context, Android.Resource.Layout.SimpleListItem1);
try {
while (++step <= count && (tmp = a + b) < max) {
res.Add(tmp.ToString());
a = b;
b = tmp;
}
} catch(System.Exception) {}
// After generating numbers, I assign the ArrayAdapter to the ListView
RunOnUiThread(() => lvRes.Adapter = res);
}).Start();