我有问题。 CoinPriceLayout.RemoveAllViewsInLayout();
int index = 0;
foreach (var coin in coinList)
{
var view = LayoutInflater.Inflate(Resource.Layout.LiveCoinPrice, CoinPriceLayout, false);
TextView LiveCoinName = view.FindViewById<TextView>(Resource.Id.txtCoinName);
TextView LiveCoinPrice = view.FindViewById<TextView>(Resource.Id.txtCoinPrice);
LiveCoinName.Text = coin.Coin;
LiveCoinPrice.Text = coin.Price.ToString();
Activity.RunOnUiThread(() =>
{
CoinPriceLayout.AddView(view, index);
});
index += 1;
}
您不需要了解所有变量,但可以用正确的价格获得3个硬币。然后,我添加一个foreach coin布局以显示在屏幕上,并在更新后删除所有视图并重新构建。现在,此代码第一次正确运行,但是第二次在此行崩溃:
CoinPriceLayout.AddView(view, index);
出现错误:
Java.Lang.IndexOutOfBoundsException:index = 3 count = 0
现在唯一的区别是,第二次进入该代码时,它将与后台工作程序一起运行。但是我不明白为什么它第一次正确运行。
我这样运行后台线程:
System.Threading.Timer CoinPrice_Timer = new System.Threading.Timer(new TimerCallback(LoadCoins), null, 1000, 1000);
有人可以帮我吗?
答案 0 :(得分:0)
这是因为您试图在CoinPriceLayout
的位置3处添加视图。但是您已经使用RemoveAllViewsInLayout
清除了此布局的子级,因此发生索引不足错误,因为没有其他此布局中的视图。索引应为0。
您可以尝试在CoinPriceLayout.AddView(view, index);
处创建一个断点并检查索引的值。您忘了将索引值重置为0吗?
更新
您第二次在后台线程调用LoadCoins
,因此index += 1;
不会等待
Activity.RunOnUiThread(() =>
{
CoinPriceLayout.AddView(view, index);
});
当您想在索引0处添加视图时,它将直接变为2。这会导致问题。因此,最好将index += 1;
放在RunOnUiThread
中:
Activity.RunOnUiThread(() =>
{
CoinPriceLayout.AddView(view, index);
index++;
});