Показать вторую форму по нажатию кнопки в Delphi Android

Поднимите ошибку, когда я нажму кнопку и вызову отладчика form.show.

Проект AVA.apk поднял класс исключения EJNIException с сообщением "android.view.ViewRootImpl$CalledFromWrongThreadException: только исходный поток, создавший иерархию представлений, может касаться его представлений".

Модуль 2:

var  
   frmSettings: TfrmSettings;

Событие onClick кнопки Unit1:

procedure TfrmMain.btnSettingsClick(Sender: TObject);
begin
  frmSettings:=TfrmSettings.Create(Application);
  frmSettings.Show;
end;

1 ответ

Решение

Код, предоставленный вами, сам по себе не является причиной ошибки. Однако код, который выполняется во время создания и / или показа вашей формы, может.

Вы, кажется, используете / вызываете нативные Android API, которые должны работать в контексте потока пользовательского интерфейса Android. Поскольку основной поток Delphi и поток пользовательского интерфейса Android - это разные потоки, вы вызываете ошибку.

Чтобы избежать этого, используйте:

procedure TfrmMain.btnSettingsClick(Sender: TObject);
begin
  CallInUiThread(procedure
    begin
      frmSettings:=TfrmSettings.Create(Application);
      frmSettings.Show;  
    end);  
end; 
Другие вопросы по тегам