Как отобразить диалог внутри представления? - PullRequest
0 голосов
/ 14 января 2020

Я новичок в android -программировании и для первой программы я пытался сделать простой понг-клон. Моя программа сшита из разных инструкций, и немного я смог справиться сам.

Базовая линия: когда я нажимаю кнопку «играть», она вызывает мою «GameActivity», которая устанавливает мой » GameView "как его ContentView. Внутри GameView я работаю со всем: от игры, отскакивания мяча, игрока (ов) и врага. Но моя проблема в том, как выбраться из этого, как только один игрок выиграет.

Сначала я хотел просто вызвать диалог, который спрашивает игрока, хочет ли он играть снова или go вернуться в меню, но Конечно, я ничего не могу сделать, потому что я в «GameView». Если я пытаюсь, это всегда говорит мне, что я не могу, потому что «на не * stati c методы нельзя ссылаться из stati c context».

Так что моя 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");

Но, как я уже сказал, насколько я понял, я не могу сделать это в представлении.

TLDR: Как я могу остановить или изменить ContentView из моего Activity или вызвать диалог внутри этого View?

Как я уже говорил, я очень плохо знаком с Android - программирование, так что извините, если способ, которым я это сделал, очень запутанным.

1 Ответ

1 голос
/ 14 января 2020

Вы можете сохранить контекст этого действия в конструкторе 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();
    }
}
...