ポップアップウィンドウの作成に問題があります。開発中のゲームがあり、ゲームに勝った後にウィンドウまたはサブメニューをポップアップ表示して、ユーザーが終了または再起動できるようにしようとしています。ポップアップウィンドウで見たものはすべて、アクティビティで実行されます。これを「コントローラー」クラスから実行したいのですが、基本的には、ユーザーが私のロジッククラス内で勝ったかどうかを確認したいのですが、ウィンドウが表示された場合は、やらなければならないような気がします。これは私の活動です。どんな助けでもそれをいただければ幸いです。さらに詳しい情報が必要な場合はお知らせください。
2 に答える
アクティビティで行う必要があります。2つのオプションがあります。
1)ゲームが終了したことがわかったら、ポップアップを表示するかどうかを返すメソッドを「コントローラー」クラスに用意します。isGameWon()のようなもの。アクティビティからこれを呼び出し、それに応じて応答します。
2)コントローラークラスでアクティビティへの参照を保持するか、シングルトンオブジェクトとしてアクティビティへのアクセスを許可します。ゲームが終了したら、プレーヤーがコントローラークラスで勝ったかどうかを確認し、勝った場合は、アクティビティで関数を呼び出して、showGameWonPopup()などのポップアップを表示します。
UIアクティビティの外部にポップアップを表示することはできません。2つのクラスは、ゲームの最終結果について連絡し、それに応じて対応する必要があります。
実際には、カスタムの非アクティビティクラスからポップアップを表示できます。アクティビティのボタンのonTouchListenerとして設定されているカスタムクラスから実行します。この場合の重要な点は、アクティビティからonTouchメソッドに渡されるビューの親を取得することです。コンストラクターに基になるアクティビティ(またはそのアクティビティでsetContentView()に使用したレイアウト)を渡すことで、任意のクラスのポップアップコンテナビューにアクセスできると思います。
public class CustomListener implements View.OnTouchListener{
public PopupWindow mPopup;
public TalkButtonListener(Context ctx) {
LayoutInflater inflater = (LayoutInflater)
ctx.getSystemService(ctx.LAYOUT_INFLATER_SERVICE);
mPopup = new PopupWindow(
inflater.inflate(R.layout.popup_layout, null, false),
100,100,true);
}
public boolean onTouch (View v, MotionEvent event){
View v2 = (View) v.getParent();
switch(event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
mPopup.showAtLocation(v2, Gravity.CENTER, 0, 0);
return(false);
case MotionEvent.ACTION_UP:
mPopup.dismiss();
return(false);
default:
return(false);
}
}
}
ポップアップを表示するためのコードを提供してくれたToddに感謝します(ここ)。