Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

erro ao adicionar "filhos" à um view ao carregar uma página - Java.Lang.NullPointerException:

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á

1 resposta