AndroidでXamarin.FormsのListViewのItemTemplateを20回追加すると配列範囲外で落ちる話
var listView = new ListView(); listView.ItemTemplate = new DataTemplate(typeof(TextCell));
よく見る形ですが、
この、ItemTemplateを20回ほどsetすると例外発生して死にます。
まぁ、普通は初期化の時1回だけやりそうなもんですが、画面遷移を高速化しようとか思って、ListViewのInstance使いまわしで、ItemSourceの更新と同時に毎回ItemTemplateをセットしてたりすると時限爆弾のように20回目で死ぬのでつらいです(経験談)
なお、
var listView = new ListView(); for(var i = 0;i < 20;++i){ listView.ItemTemplate = new DataTemplate(typeof(TextCell)); }
こんな風に一気に20回入れても死にません。
var btn = new Button() { Text = "ボタン" }; btn.Clicked += (sender, args) => { listView.ItemTemplate = new DataTemplate(typeof(TextCell)); };
これでボタンを20回ほど押すと死亡(例外発生)です。
原因まで調べられてないですし、使用しているバージョンなんかによっては発生しなかもですが、そこまで調べてません。
とりあえず、Xamarin.FormsのListView使ってて、急にJava.Lang.ArrayIndexOutOfBoundsException: length=20; index=20
なんて例外出てきた人は疑ってみるとよいのでは。
ではでは。