3

我在创建弹出窗口时遇到问题。我有一个正在开发的游戏,我试图在赢得游戏后弹出一个窗口或子菜单,以便用户可以选择退出或重新启动。我在弹出窗口上看到的一切都是在活动中完成的。我想从我的“控制器”类中执行此操作,基本上我想检查用户是否在我的逻辑类中获胜,如果他们确实打开了一个窗口,我有一种感觉,我将不得不这样做这在我的活动中。任何帮助将不胜感激。如果您需要任何进一步的细节,请告诉我。

4

2 回答 2

2

您必须在 Activity 中执行此操作。你有两个选择:

1)当你知道游戏结束时,在你的“控制器”类中有一个方法来返回是否应该显示弹出窗口。isGameWon() 之类的东西。从您的活动中调用它并做出相应的响应。

2)在您的控制器类中保留对您的 Activity 的引用,或者允许将您的 Activity 作为单例对象访问。当游戏结束时,检查玩家是否在您的控制器类中获胜,如果是,则在您的 Activity 中调用一个函数来显示弹出窗口,例如 showGameWonPopup()。

您不能在 UI Activity 之外显示弹出窗口。你的两个班级需要就游戏的最终结果进行交流并做出相应的回应。

于 2011-03-24T16:10:46.497 回答
0

您实际上可以显示自定义非活动类的弹出窗口。我从一个自定义类执行此操作,该类设置为我活动中按钮的 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 提供显示弹出窗口的代码(此处)。

于 2012-01-04T03:02:29.327 回答