目次
- はじめに
- バグ再現
3. 画面解説
4. コード
5. Action紐づけ - 解消方法
- まとめ
- 参考
はじめに
Android端末では、ポップアップが表示されている時に、ポップアップの外側をタップすると、
後ろにあるボタンが反応してしまう場合があります。
(例:ボタンの上にzindexが大きいFlexContainerをおいても、下のボタンをタップすると動作してしまう)
今回は、コンポーネントのポップアップを使って、
後ろのボタンが反応しないようにするための対処法についてご紹介したいと思います。
バグ再現
1. 画面解説
まず事象を再現するために、btnInsert
とbtnDelete
の2つのボタンを配置し、
それぞれのボタンをタップすると、ポップアップが表示されるようなサンプルフォームを作成します。
方法のみ先に知りたい方は、3. 解消方法 をご確認ください

それぞれのボタンをタップすると、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)を参考にしてください!
タップしたボタンでポップアップのメッセージを変えるためにlblTitleを選択し、propertyの共有をします。Manage Propertiesの作成方法はこちらの記事を参考にしてください!
それぞれのボタンをタップするとこのような画面になります!
(左)Insertボタンタップ (右)Deleteボタンタップ
2. コード
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
で画面表示時にポップアップを非表示にし、各ボタンを押下するとそれぞれのポップアップが表示される関数showAddPopup
とshowDeletePopup
を書きます。
kony.ui.Alert
についてはこちらの記事を参考にしてください。
ComponentsのAlertPopupControllerもコーディングします。
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を紐づけます。
frmMainControllerのonPreShowはfrmMainを選択し、ActionからPreShow
を選択します。
では実際に見てみましょう
— Kony (@Kony12763790) December 25, 2020
Insertボタンをタップすると、AlertPopupが表示され、
その状態でポップアップの外側にあるDeleteボタンをタップすると、
ボタンが反応してしまい再びAlertPopupが表示されてしまいます。。
本来ならポップアップ表示中に、後ろのボタンは反応しないようにしたいので、
この問題の対処法について書いていきます。
解消方法
ポップアップ表示中に外側にあるボタンが反応しないようにするためには、
対象となるポップアップを選択し、タップした時に反応するonClickにたった一つアクションを追加すれば解決します。
今回の場合、AlertPopupを作成しているので、
AlertPopupを選択しonClickのEditをクリックします。
Actionの中からAdd Snippet
を選択し、returnと記載してください。
return
を追加することで、ポップアップの外側をタップしても反応しないようにすることができます。
ではどうなったか、確認してみましょう。
— Kony (@Kony12763790) December 25, 2020Deleteボタンをタップ後、AlertPopupを表示させたままInsertボタンをタップできなくなっていますね。
まとめ
ポップアップを使用して同様の事象に遭遇した時は、今回の記事を参考にしていただければと思います!