我是android编程的新手,在第一个编程中,我试图做一个简单的Pong-Clone。
我的程序是通过不同的方法和我能够自己处理的一点缝合在一起的。

基线:
当我按下“播放”按钮时,它将调用我的“ GameActivity”,该游戏将“ GameView”设置为其ContentView。在GameView内,我处理游戏,球弹跳,玩家和敌人的一切。但是我的问题是,一旦一名球员获胜,如何摆脱困境。

一开始,我只想简单地调用一个对话框,询问玩家是否要再次玩或返回菜单,但是我当然不能做与活动有关的任何事情,因为im在“ GameView”中。如果我尝试这样做,总是告诉我不能,因为“不能从静态上下文中引用非静态方法”。

所以我的GameActivity很简单:



public class GameActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(new GameView(this));


    }
}


首先,我只是将这样的内容放入视图中:

        InfoDialog infoDialog = new InfoDialog();
        infoDialog.show(getSupportFragmentManager(), "infoDialog");


但据我所知,我无法在View中做到这一点。

TLDR:如何在“活动”中停止或更改ContentView或在该视图内调用对话框?

就像我说的那样,我对Android编程非常陌生,如果对我的操作方式感到困惑,请对不起。

最佳答案

您可以将该活动的上下文保存在GameView构造函数上,并在需要时使用它:

class GameView extends View {

    private Context mContext;

    //Constructor
    public GameView (Context context) {
        super(context);
        mContext = context
    }

    //Can be called inside the view
    public ShowDialog() {
        AlertDialog alertDialog = new AlertDialog.Builder(mContext).create();
        alertDialog.setTitle("Alert");
        alertDialog.setMessage("Alert message to be shown");
        alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
        });
        alertDialog.show();
    }
}

10-04 17:59