0

私は、ユーザーがキャンバス上を動き回っており、このシナリオでは、戦闘をトリガーする犬と対話できるゲームを持っています。

これによりダイアログが読み込まれ、ユーザーは戦うか逃げるかを選択できます。ユーザーがfightをクリックすると、別のダイアログが表示されます。これにより、テキスト(あなたの詳細と犬の詳細)が表示され、そのテキストの下に攻撃ボタンがあります。

アタッチボタンをクリックすると、いくつかのことが起こります(relventではありません)。これは、基本的に、ユーザーと犬の詳細が変更されることを意味します(たとえば、DogHPが18に低下します)。

だから私の質問は:

  • ロードする最初のダイアログボックスには、動的情報「DogHP」があります。
  • 攻撃ボタンがクリックされると、その情報が変更されます。
  • したがって、最初のダイアログボックスを、builder.setMessage()を使用して現在表示している新しい情報で更新する必要があります。
  • 例:元のHP =20...攻撃ボタンがクリックされた...新しいHP=10

以下のコードスニペットをご覧ください。アイデアやガイダンスをいただければ幸いです。

コードスニペット:

void Fight()
{
    final int DogHP = 25;
    final int DogAtk = 15;
    final int DogDef = 5;
    final int DogSpeed = 20;

    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setTitle(context.getText(R.string.monster_dog_title));
    LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = inflater.inflate(R.layout.fight, null);
    builder.setView(view);
    final AlertDialog DogBattle = builder.create();

    View FightBtn = view.findViewById(R.id.dog_fight);
    FightBtn.setOnClickListener(new OnClickListener()
    {
        boolean attacked = false;
        @Override
        public void onClick(View clicked)
        {
            if(clicked.getId() == R.id.dog_fight)
            {
                AlertDialog.Builder builder = new AlertDialog.Builder(context);
                builder.setTitle(context.getText(R.string.monster_fight));
                builder.setMessage("Your Current Battle Details:\n" + "HP = " + UserHP + "  Def = " + UserDef + "  Atk = " + UserAtk + "\n\n" + "Your Enemy:\n" + "HP = " + DogHP + "  Def = " + DogDef + "  Atk = " + DogAtk);

                LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                View view = inflater.inflate(R.layout.monsterbattle, null);
                builder.setView(view);
                final AlertDialog BattleRun = builder.create();
                BattleRun.show();
                View LeaveBattle = view.findViewById(R.id.Attack);
                LeaveBattle.setOnClickListener(new OnClickListener()
                {
                    @Override
                    public void onClick(View clicked)
                    {
                        if(clicked.getId() == R.id.Attack)
                        {
                            // SOME CODE GOES HERE
                        }
                    }
                });
            }
        }
    });
}

助けてくれてありがとう。

4

2 に答える 2

0

私はこれを試していませんが、ダイアログのテキストフィールドのIDはandroid.R.id.customであると信じているので、次のようなことができるはずです。

((TextView)dialog.findViewById(android.R.id.custom)).setText(newTextToShow)

ただし、より良いアプローチは、カスタムダイアログを使用することです。

于 2012-07-05T16:23:44.623 に答える
0

ダイアログで発生しすぎて、変数の代わりにオブジェクトを使用して新しいクラスを作成することになったため、上記のアイデアを完全に破棄することにしました。

于 2012-11-22T11:52:21.290 に答える