2017-02-28 7 views
1

私はモバイルアプリケーションを開発するためにコードネームワンを使用しています。コード名複数のサブコンテナを含むコンテナ内で1つのイベントをリッスンする

addPointerReleasedListenerを呼び出すことによってActionListenerを追加した外部コンテナがあります。

リスナーに追加されていないインナーコンテナがさらにあります。説明するために

outer-Container (added `addPointerReleasedListener` to it) 
- An Image Container (NO listener added) 
- A Text Container (NO listener added) 


-------------------------------------------------------------- 
| |   |            | 
| |   |            | 
| | Image | Some Text here        | 
| |   |            | 
| |   |            | 
-------------------------------------------------------------- 
            ^ ^ ^
            works only if I click/press 
            here 

を私はイベントを呼び出すために、私はどんなインナーコンテナを占有されていない領域に/プレスをクリックする必要があることに気づきました。つまり、リスナーが追加されていないため、テキスト領域と画像領域をクリック/押しても、ではなく、が機能します。私は具体的に外側のコンテナの "空の"領域をクリック/押さなければなりません。明らかに、これは理にかなっていません。なぜなら、ユーザーがその中のどこかをクリック/押したときに、コンテナ全体を同じように反応させたいからです。

これを実装する最良の方法/慣行は何ですか? (同じリスナーを多くの内部コンテナに追加するのは少し冗長です)

+0

答えがあなたの問題を解決しましたか? – Diamond

答えて

3

あなたのアプローチは実際のデバイスでは正しく動作しません。

ボタンを作成してactionListenerを追加し、その外側のコンテナのleadComponentをそのボタンに設定します。

Button btn = new Button(""); 
btn.addActionListener(e -> { 
    //Your action here 
}); 
outerContainer.setLeadComponent(btn); 

このボタンをコンテナに追加する必要はなく、単にleadComponentとして設定するだけです。

+0

うん、それはうまくいった。ありがとう!ただし、(ActionEvent actionEvent)のgetSource()メソッドでそのButtonを送信しています。私はこれを回避するために、リスナーを外部コンテナを引数として受け入れるコンストラクタをインスタンス化する必要があります(正しい外部コンテナに応答できるように)。私はこれが何らかの問題やメモリリークを引き起こすとは思わないので、問題はないと思います。ありがとう! – ikevin8me

関連する問題