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