Buenas!
Criei uma pagina, que contem um stackLayout na vertical e dentro dele adiciono outros stacklayouts na horizontal, para assim poder fazer uma especie de "Lista" com várias colunas. Para que essa função funcione, eu preciso que seja atualizada essa lista toda vez que a página for apresentada (ou somente quando a lista de arquivos for alterada), porém se eu chamo o método "AdjustGrid" no evento "OnApearing" da página, eu tenho esse erro:
Java.Lang.NullPointerException:
Segue código:
public void AdjustGrid()
{
int collumnIndex = 0;//indice atual da coluna
int rowIndex = 0;//indice atual da linha
if (this.Width > 100)
{
numCollumns = Convert.ToInt32((int)Math.Ceiling(this.Width / this.imageSize));//calcula o número de colunas através da largura da scrolview sobre a dimensão de cada miniatura;
}
{
if (this.dao.List.Count > 1)
{
numRows = Convert.ToInt32((int)Math.Floor((double)this.dao.List.Count / (double)numCollumns)); //calcula o numero de linhas necessárias para os arquivos, levando em consideração quantas colunas existem atualmente
}
else
{
numRows = 1;
}
}
if (numCollumns > 0 && numRows > 0)
{
#region Limpa e cria um novo grid principal para os arquivos
if (this.fileStackExplorer != null)
{
if (this.fileStackExplorer.Children != null)
{
this.fileStackExplorer.Children.Clear();
}
StackLayout Stack = new StackLayout();
#endregion
#region Adiciona as miniaturas das plantas e seus nomes no grid principal
foreach (var file in dao.List)
{
#region imagem do slide da planta
Image slide = new Image
{
Source = ImageSource.FromResource("Promob_Draw.Identity.nautilus.png"),
Aspect = Aspect.AspectFill
};
#endregion
#region Frame formando um background do slide
Frame backSlide = new Frame
{
HasShadow = true,
OutlineColor = Color.Black
};
#endregion
#region SubGrid utilizado para dividir o espaço do slide e do label
var Subgrid = new Grid
{
VerticalOptions = LayoutOptions.FillAndExpand,
#region Row definitions
RowDefinitions =
{
new RowDefinition{ Height = new GridLength(15, GridUnitType.Absolute)}, //primeira linha, espaçamento
new RowDefinition{ Height = new GridLength(imageSize-30, GridUnitType.Absolute)}, //segunda linha, espaço para o slide da planta
},
#endregion
#region Column Definitions
ColumnDefinitions =
{
new ColumnDefinition { Width = new GridLength(15, GridUnitType.Absolute) }, //primeira coluna margem
new ColumnDefinition { Width = new GridLength(imageSize-30, GridUnitType.Absolute) }, //segunda coluna espaço para o slide da planta
}
#endregion
};
Subgrid.RowSpacing = 0;
Subgrid.ColumnSpacing = 0;
Subgrid.BackgroundColor = Color.Transparent;
#endregion
#region Label do nome da planta
Label item_atual = new Label
{
Text = file.DraftName,
VerticalTextAlignment = TextAlignment.End,
HorizontalTextAlignment = TextAlignment.Center,
TextColor = Color.Black,
BackgroundColor = Color.Transparent,
FontAttributes = FontAttributes.Bold
};
#endregion
#region adiciona itens
backSlide.Content = slide;//adiciona o slide ao Frame
Subgrid.Children.Add(backSlide, 1, 1); //adiciona o Frame, com o slide, ao subgrid
if (collumnIndex == 0)
{
Stack = new StackLayout
{
VerticalOptions = LayoutOptions.FillAndExpand,
HorizontalOptions = LayoutOptions.CenterAndExpand,
Orientation = StackOrientation.Horizontal
};
this.fileStackExplorer.Children.Add(Stack);
}
Grid Grid = new Grid
{
VerticalOptions = LayoutOptions.FillAndExpand,
#region Row definitions
RowDefinitions =
{
new RowDefinition{ Height = new GridLength(imageSize, GridUnitType.Absolute)},
},
#endregion
#region Column Definitions
ColumnDefinitions =
{
new ColumnDefinition { Width = new GridLength(imageSize, GridUnitType.Absolute) }, //segunda coluna espaço para o slide da planta
}
#endregion
};
Grid.Children.Add(Subgrid, 0, 0);
Grid.Children.Add(item_atual, 0, 0);
Stack.Children.Add(Grid);
#endregion
#region calcula o indice da proxima insersão
if (collumnIndex < (numCollumns - 1))
{
collumnIndex++;
}
else
{
collumnIndex = 0;
rowIndex++;
}
#endregion
}
#endregion
}
}
}
protected override void OnAppearing()
{
this.FadeTo(1);
this.AdjustGrid();
base.OnAppearing();
}
Agradeço desde já