Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

ボタンで数値入力を決定

こんにちは、初投稿になります。
簡単な質問かもしれませんが、みなさんのお力をお貸しいただきたく参りました。

今AndroidStudioにて簡単なJavaのトランプゲームアプリを作成しようと試みています。
しかし以下のような処理でどうすればよいのかわからず止まってしまいました。

1.手持ちのカードを出す際、そのカードが特殊な数字かcheckする。
2.もし特殊な数字ならば、新しくウィンドウを出す(この間処理を少し待たせる)。
3.プレイヤーにどうするか選択肢を選ばせたのち、メインにその選択肢を反映させる。

具体的には以上の処理のうち
・新しいウィンドウを出すための手段
・プレイヤーの選択を少しの間待つ
という処理がどうしてよいかわかりません。

下に自分の現在のプログラムを載せていただきます。

以下よりコード文
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

public class MainActivity extends AppCompatActivity {

//宣言などは省略

protected void onCreate(Bundle savedInstanceState) {
useCardB.setOnClickListener(new View.OnClickListener() {//カードを使うボタンです
                @Override
                public void onClick(View v) {
                    int num = hand[finalI].getNum();//手札の数値をいったん入れます
                    if(checkSpecial(num)){//そいつを確認します。このmethod内にプレイヤーへの選択を尋ねる何かを入れたいです(Aの時は1 or 11が選べる、Jなら50 or 0が選べる、など)。
                          PopupWindow choiceWindow = new PopupWindow(this);
                          //ここのところがわかりません。
                    }
       prosedure(num)//数字に応じて場の値が変わるなどします。内容は省略
                    nextTurn();//次のターンへ行きます。
                }
            });
}
//その他optionMenuなどは省略
}

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

以上になります。
皆様のお力添えお待ちしています。
よろしくお願いいたします。

4

回答

7069

閲覧

4件の回答

評価

0

コードを載せるのもいいが、分からないことについて何を調べて何をしてみたかを書いてみよう。
丸ごと教えてくださいもらっても、力にならないことが多いぞ。

評価

0

解答ありがとうございます!
ご指摘の通り調べたことを書いてみようと思います。
少し長くなりますがお付き合いいただける方はどうぞよろしくお願いします。
投稿は二つに分けさせていただきます。

前半は調べて考えたことをできるだけ時系列に沿って書き、
後半はそれに基づいた自分のコードを、もう少し長めに書かせていただきます。

もう一度確認のために書かせていただきますが、行いたい処理は
(1)ボタンを押すとWindowが出てプレイヤーに選択を迫る。
(2)そのWindowが出て選択を待つ間、アプリは待っている。
(3)そのWindowの選択により得た値を取得し、元のアプリは動きを再開する(MainActivityにあるTextViewなどに値を反映させたい)。

です。
自分は以下のような手順で考えました。

解決するために考えたこと。
(1)ボタンに対する反応はPopupWindowを使えば処理可能そうである。ボタンを押したときに選択を問うLayoutを新しく作ればそこにボタンを配置して解決できそうだ。
(2)しかし
・値は元のActivityに返したい
・ボタンは新しく出来たWindowに表示したい
この二つの要素を両立させるのはどうしたらいいのかわからない。具体的に言うと、
・OnClickのmethodを用いてWindowの作成と、出来たWindowからの値のreturnを同時に行うことが出来ない(Windowボタンを押すと、Windowが出る処理と値を参照する処理が同時に行われ、MainActivityがPopupWindowからの戻り値を待たない)。
(3)そこでMainActivityにあるViewを引数として(どんどん潜らせて?)新しく作ったPopupWindowのボタンが直接MainActivityのviewをいじれるようにした。


しかし、PopupWindowの中にあるボタンを押したときに、再度選択肢を作ることなどを考えると、ActivityとViewのすべてを引数に入れていくことに違和感を覚えた。そこで他の方法を模索した。

(3)マルチスレッドによる処理を考えた。waitという処理が、マルチスレッドによって行えることを知ったため、その方法を模索した。しかし勉強が不足したためか思い通りにいかなかった。


思考のプロセスは以上になります。
直接的な解答ではなくても、調べ方や考え方などのご指摘もいただければ幸いです。
知識や常識に不足していると自負していますので、指摘してくださる箇所は全て勉強の対象だと考えております。
出先につきコードを貼ることは少し遅れてしまいますが、急ぎの解答とさせていただきます。
どうぞよろしくお願いします。

評価

0

別に戻り値でなくても、状態が保存されていれば、Mainからいつでも参照できるのではないかね。そのWindowのインスタンス自体を参照可能にしておく必要があるが。

評価

0

回答ありがとうございます!

あれからDialogでウィンドウを表示する方法を見つけて試行錯誤したところ実現が可能となりました。
匿名さんがおっしゃってくださったように、一度値を他に保存し、onClick内で参照する処理を分岐させて行わせることで解決されました。
僕の当初の予定の反応を待つものではなくなりましたが、大変良い勉強になりました。
また何かありましたらよろしくお願いします。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。