0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Androidでポップアップが表示されている時に、ポップアップの外側をタップすると、後ろにあるボタンが反応してしまう場合の対処法

Last updated at Posted at 2021-01-06

目次

  1. はじめに
  2. バグ再現
    3. 画面解説
    4. コード
    5. Action紐づけ
  3. 解消方法
  4. まとめ
  5. 参考

はじめに

Android端末では、ポップアップが表示されている時に、ポップアップの外側をタップすると、
後ろにあるボタンが反応してしまう場合があります。
(例:ボタンの上にzindexが大きいFlexContainerをおいても、下のボタンをタップすると動作してしまう)

今回は、コンポーネントのポップアップを使って、
後ろのボタンが反応しないようにするための対処法についてご紹介したいと思います。

バグ再現

1. 画面解説

まず事象を再現するために、btnInsertbtnDeleteの2つのボタンを配置し、
それぞれのボタンをタップすると、ポップアップが表示されるようなサンプルフォームを作成します。

方法のみ先に知りたい方は、3. 解消方法 をご確認ください:runner_tone4::dash:

それぞれのボタンをタップすると、AlertPopupが表示されるよう、Componentを作成します。
ComponentはTemplatesタブのComponentsから作成できます。
作成方法は[こちらの記事]
(https://qiita.com/Kony_Team/items/a25b322d9524f9f1ac92#1-%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90)を参考にしてください!
スクリーンショット 2020-12-25 17.20.15.png

タップしたボタンでポップアップのメッセージを変えるためにlblTitleを選択し、propertyの共有をします。Manage Propertiesの作成方法はこちらの記事を参考にしてください!
スクリーンショット 2020-12-25 17.21.08.png
それぞれのボタンをタップするとこのような画面になります!
(左)Insertボタンタップ (右)Deleteボタンタップ

2. コード
frmMainController.js
define({ 

  onPreShow: function() {
    this.view.AlertPopup.setVisibility(false);
  },

  showAddPopup: function() {
    // 共有したComponentのPropertyから表示させるテキストを指定
    this.view.AlertPopup.titleText = "Do you want to Insert the data?";
    this.view.AlertPopup.setVisibility(true);
  },

  showDeletePopup: function() {
    // 共有したComponentのPropertyから表示させるテキストを指定
    this.view.AlertPopup.titleText = "Do you want to Delete the Data?";
    this.view.AlertPopup.setVisibility(true);
  },

});

この時のfrmMainControllerのコードです。
onPreShowで画面表示時にポップアップを非表示にし、各ボタンを押下するとそれぞれのポップアップが表示される関数showAddPopupshowDeletePopupを書きます。
kony.ui.Alertについてはこちらの記事を参考にしてください。

ComponentsのAlertPopupControllerもコーディングします。

AlertPopupController.js
define(function() {
  return {
    closePopup: function() {
      // AlertPopupを非表示にする
      this.view.setVisibility(false);
    },
  };
});

ポップアップのOKボタンを押した時にAlertPopupを非表示にする関数を書きます。

3. Action紐づけ

関数をそれぞれ用意したのでAcrtionの紐づけを行います。
frmMainのbtnInsertを選択し、onClickのEditをクリックします。
Actionの中からInvoke Funcitonを選択し、紐づけたい関数(showAddPopup)を選択します。
同様の手順で
btnDeleteとshowDeletePopup、
AlertPopupのbtnOKとclosePopupを紐づけます。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3539323236342f62343238353962652d656436342d333565612d633461322d3463633564356162333065322e706e67のコピー2.png

frmMainControllerのonPreShowはfrmMainを選択し、ActionからPreShowを選択します。

では実際に見てみましょう

Insertボタンをタップすると、AlertPopupが表示され、
その状態でポップアップの外側にあるDeleteボタンをタップすると、
ボタンが反応してしまい再びAlertPopupが表示されてしまいます。。:frowning2:

本来ならポップアップ表示中に、後ろのボタンは反応しないようにしたいので、
この問題の対処法について書いていきます。

解消方法

ポップアップ表示中に外側にあるボタンが反応しないようにするためには、
対象となるポップアップを選択し、タップした時に反応するonClickにたった一つアクションを追加すれば解決します。

今回の場合、AlertPopupを作成しているので、
AlertPopupを選択しonClickのEditをクリックします。

Actionの中からAdd Snippetを選択し、returnと記載してください。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3539323236342f66316234373663302d393433332d666232622d316135342d3364353665396362356362662e706e67のコピー2.png

returnを追加することで、ポップアップの外側をタップしても反応しないようにすることができます。

ではどうなったか、確認してみましょう。

Deleteボタンをタップ後、AlertPopupを表示させたままInsertボタンをタップできなくなっていますね。

まとめ

ポップアップを使用して同様の事象に遭遇した時は、今回の記事を参考にしていただければと思います!

参考

AlertTypeについて:
https://qiita.com/Kony_Team/items/c992fd281801944ccc3f#4-%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E5%87%A6%E7%90%86

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?