【问题标题】:Android - Issue with Dialog Boxes/ clicking of buttonsAndroid - 对话框问题/单击按钮
【发布时间】:2012-07-06 02:10:46
【问题描述】:

我有一个游戏,用户在画布上四处移动,并且可以与触发战斗的狗互动。

这会加载一个对话框,让用户可以选择战斗或逃跑。用户点击战斗,然后弹出另一个对话框,其中显示一些文本(您的详细信息和狗的详细信息),并且在该文本下方有一个攻击按钮。

当您单击附加按钮时,会发生一些事情(不相关),这实际上意味着用户和狗的详细信息发生了变化(例如 DogHP 降至 18)。

所以我的问题是:

  • 我加载的第一个对话框有动态信息“狗 HP”。
  • 点击攻击按钮后,该信息会发生变化。
  • 因此,我需要使用 builder.setMessage() 使用当前显示的新信息更新第一个对话框
  • 例如原始HP = 20 ...点击攻击按钮...新HP = 10

请参阅下面的一些代码 sn-p,任何想法或指导将不胜感激:

代码片段:

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
                        }
                    }
                });
            }
        }
    });
}

在此先感谢您的帮助。

【问题讨论】:

  • 基本上,我加载的第一个对话框在单击攻击按钮后具有动态信息“Dog HP”,然后该信息被更改。因此,我需要使用 builder.setMessage() 使用当前显示的新信息更新第一个对话框

标签: java android button dialog onclick


【解决方案1】:

我决定完全放弃上面的想法,因为它在对话框中发生了太多事情,最终创建了一个新类以及使用对象而不是变量。

【讨论】:

    【解决方案2】:

    这个我没试过,但是我相信对话框中文本字段的id是android.R.id.custom,所以你应该可以这样做:

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

    不过,更好的方法可能是使用自定义对话框。

    【讨论】:

    • 我是 Java/Android 开发的新手,因此如果您能给我一个教程来查看或更多代码 sn-p 工作,我将不胜感激。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    • 2019-01-30
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多