Android If语句仅在resume()上完全运行

Android If语句仅在resume()上完全运行,android,if-statement,radio-button,settext,Android,If Statement,Radio Button,Settext,我正在尝试设置一个战斗系统,允许用户在近战攻击和远程攻击之间选择两个单选按钮中的一个。根据变量,按钮可以说什么动作,超出范围,攻击近战,攻击范围,重新加载范围。onresume单选按钮具有正确的文本。第一次发射远程武器后,战斗开始时远程武器已经重新装填,远程无线电的文本更改为重新装填范围,但即使武器“重新装填”,也不会从重新装填范围更改为攻击范围,并且在我结束回合并执行设定动作时,将发射造成伤害的武器。如果武器需要2次换装。我花了2个回合重新装填,点击主页按钮,然后返回活动,它将正确设置下一步,

我正在尝试设置一个战斗系统,允许用户在近战攻击和远程攻击之间选择两个单选按钮中的一个。根据变量,按钮可以说什么动作,超出范围,攻击近战,攻击范围,重新加载范围。onresume单选按钮具有正确的文本。第一次发射远程武器后,战斗开始时远程武器已经重新装填,远程无线电的文本更改为重新装填范围,但即使武器“重新装填”,也不会从重新装填范围更改为攻击范围,并且在我结束回合并执行设定动作时,将发射造成伤害的武器。如果武器需要2次换装。我花了2个回合重新装填,点击主页按钮,然后返回活动,它将正确设置下一步,并说距离攻击,否则它将保持装填范围

查找单选按钮,如果语句首先检查是否有远程武器EquipmRangeID==50表示没有武器,然后检查武器是否加载int rangeReload=100,最后检查是否在攻击/射击范围内

    private void setActions(){
         RadioButton meleeRadio = (RadioButton) findViewById(R.id.meleeRadio);
         RadioButton rangeRadio = (RadioButton) findViewById(R.id.rangeRadio);
            if (meleeRange >= distance){meleeRadio.setText(meleeString);}else{meleeRadio.setText(oorString);}
            if (rangeId == 50){rangeRadio.setText(norangeString);}else{if(rangeReload<=99){rangeRadio.setText(reloadString);}else{
            if (rangeRange >= distance){rangeRadio.setText(rangeString); Log.e(rangeString, "Range Attack called");}else{rangeRadio.setText(oorString);}}}
    }
我称之为行动;在两个地方。在onresume中,通过预战斗->布局战斗

@Override
protected void onResume() {     
    new pullCombatActions().execute();
    new prepCombat().execute();
    super.onResume();}


    private class prepCombat extends AsyncTask<String, Void, String>{

        @Override
        protected String doInBackground(String... params) {
            playerBattlePrep();
            findNPC();
            return null;}
        @Override
        protected void onPostExecute(String result) {
            new layoutCombat().execute();
        }
     }

    private class layoutCombat extends AsyncTask<String, Void, String>{

        @Override
        protected String doInBackground(String... params) {
            startCombat();
            pullCombatText();
            return null;}
        @Override
        protected void onPostExecute(String result) {
            setActions();
            popStats();
            refreshStats();
            combatStartText();}
     }
第二个地方我称之为设置动作;在我的AsyncTask中,我在战斗回合结束时运行,以刷新屏幕并通过转鼓向用户显示发生了什么

private class replaceScreen extends AsyncTask<String, Void, String>{

    @Override
    protected String doInBackground(String... params) {
        pullCombatStory();
        return null;
    }
    @Override
    protected void onPostExecute(String result) {
        refreshStats();
        refreshCombatStory();
        highLightPlayerActions();
        highLightNpcActions();
        setActions();
        }
    }

我不明白为什么在设置rangeRadio时,if语句的一半似乎停止了,但onResume让它完全完成并显示rangeRadio的正确文本。

只是一个建议,请尝试移动

     RadioButton meleeRadio = (RadioButton) findViewById(R.id.meleeRadio);
     RadioButton rangeRadio = (RadioButton) findViewById(R.id.rangeRadio);
在onResume方法之外,将其放在onCreate或onActivityCreated上(如果是片段方法),并将rangeRadio和MeleRadio作为私有变量放在活动或片段中

然后,由于您使用的是链式异步任务,我不确定是否所有onPostExecute都在您的UI线程上运行,因此我将尝试在如下处理程序中封装您对rangeRadio.setText的所有调用:

在您的onCreate活动中:

handler =  new Handler();
然后,在设置文本时,请执行以下操作:

handler.post(new Runnable() {

            public void run() {
                rangeRadio.setText("...");

            }
        });

谢谢你的帮助。在我匆忙寻找一个好的过夜地点时,我忘了为角色重新加载设置AsyncTask。因此,当玩家因为超出范围或玩家正在重新加载而没有攻击时,不会调用setActions