Попытка вызвать виртуальный метод void android.view.View.resolveLayoutParams() для нулевой ссылки на объект

У меня есть ScrollView, добавленный в FrameLayout. Нажав кнопку, я удаляю ScrollView из FrameLayout и добавляю элемент, производный от ViewGroup. При повторном нажатии кнопки ViewGroup удаляется, а ScrollView добавляется обратно. При добавлении ScrollView обратно в FrameLayout после удаления ViewGroup я получаю следующее исключение из метода AddView FrameLayout. На самом деле он выбрасывается из метода AddView() класса ViewGroup, поскольку FrameLayout является производным от ViewGroup.

Unhandled Exception:

Java.Lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.resolveLayoutParams()' on a null object reference occurred

Я уже пытался переключать видимость обоих представлений вместо добавления одного и удаления другого. Но после переключения видимости приложение аварийно завершает работу каждый раз, когда вызывается OnLayout FrameLayout, например, когда появляется клавиатура Android или изменяется ориентация устройства.

Мне жаль, что я не могу предоставить код. Потому что мой код очень сложный и я не смог воспроизвести эту проблему на простом примере. Я просто разместил этот вопрос в крайнем случае.

Я знаю, что невозможно получить решение, если код не включен. Но любой вклад, связанный с этой проблемой, будет полезен.

@LeoZhu-MSFT Это работает. Спасибо большое.

Navaneeth 05.06.2019 03:50
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
1
1 481
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку вы не можете предоставить код здесь, я могу написать только часть кода, чтобы показать ваши требования:

в xaml я добавляю ScrollView (с его дочерними элементами) и LinearLayout (который является вашей ViewGroup) в FrameLayout:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent">
<FrameLayout 
    android:id="@+id/framelayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above = "@+id/click"
    >
   <ScrollView 
        android:id="@+id/scroll"
        android:layout_width="match_parent"
        android:layout_height="match_parent"    
        >
      <LinearLayout
              android:layout_width="match_parent"
              android:layout_height="match_parent"  
            >
        <TextView 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text ="text in scrollview"
            />

        </LinearLayout>

    </ScrollView>
  <LinearLayout
        android:id="@+id/linearlayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"    
        android:visibility="gone"
            >
        <TextView 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text ="text iFn LinearLayout"
            />

        </LinearLayout>
</FrameLayout>
<Button  
    android:id = "@+id/click"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"    
    android:text="click"
    android:layout_alignParentBottom="true"
/>
</RelativeLayout>

в действии покажите и скройте Scrollview и LinearLayout, нажав кнопку:

  private int num = 1;
  protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.activity_main);        
        Button button = FindViewById<Button>(Resource.Id.click);
        FrameLayout frameLayout = FindViewById<FrameLayout>(Resource.Id.framelayout);
        ScrollView scrollView = FindViewById<ScrollView>(Resource.Id.scroll);
        LinearLayout linearLayout = FindViewById<LinearLayout>(Resource.Id.linearlayout);
        button.Click += delegate
        {
            if (num % 2 ==0)
            {
                scrollView.Visibility = Android.Views.ViewStates.Gone;
                linearLayout.Visibility = Android.Views.ViewStates.Visible;
            }
            else
            {
                linearLayout.Visibility = Android.Views.ViewStates.Gone;
                scrollView.Visibility = Android.Views.ViewStates.Visible;
            }
            num++;
        };
    }

Другие вопросы по теме