なんだかんだでプログラムが好き

私 すずきかつーき が主にプログラムに関する事を書いたり書かなかったりします

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なんて例外出てきた人は疑ってみるとよいのでは。

ではでは。