如果声明给出条件总是如此

时间:2017-10-31 13:45:40

标签: android if-statement

当我使用if语句时,它告诉我条件x始终为真,虽然我在另一个应用程序中使用相同的代码并且它可以工作,但在这种情况下我在onOptionsItemSelected方法中使用它我的菜单,那么有人可以帮忙吗?

public class Wellcome extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_wellcome);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

        }

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.chang_language, menu);
    return true;
}
 Boolean x=true;
@Override
public boolean onOptionsItemSelected(MenuItem item) {
   int id = item.getItemId();
   if (id == R.id.arabic) {
       if (x =true) {
           setLocale("en");
           x = false;
       } else  if (x =false) {
           setLocale("ar");
           x = true;
       }
     return true;
   }
    return super.onOptionsItemSelected(item);
}
public void setLocale(String lang) {
    java.util.Locale myLocale = new Locale(lang);
    DisplayMetrics dm = getResources().getDisplayMetrics();
    Configuration conf = getResources().getConfiguration();
    conf.locale = myLocale;
    getResources().updateConfiguration(conf, dm);
    Intent refresh = new Intent(this, Wellcome.class);
    startActivity(refresh);
       }
     }

4 个答案:

答案 0 :(得分:1)

您正在分配变量而不是仅使用作为逻辑错误的Boolean值,而应在语句中使用x本身:

if (x) {
       setLocale("en");
       x = false;
   } else{
       setLocale("ar");
       x = true;
   }

工作完成了!如果x的值为true,则if语句将自行执行,但如果xfalse,则else将执行,则不需要要使用===进行比较,只需使用布尔值本身。我的建议也使用boolean而不是Boolean类。为了表现!

答案 1 :(得分:1)

绕过比较运算符错误=而不是====是正确的,请更新您的代码),这是从其他答案解决的,您的程序引导流程永远不会到达(至少是用户体验部分)在x语句中将false变量设置为if的部分。

setLocale("en");
x = false; // -> this part is not reached because you start a new activity of the same class in the setLocale above

更具体地说,setLocale方法中调用的onOptionsItemSelected方法会通过以下代码重新启动您的活动:

Intent refresh = new Intent(this, Wellcome.class);
startActivity(refresh);

由于Wellcome活动是从refresh意图开始的,因此新的Wellcome活动会显示在旧活动之上,当然这个新活动的字段变量也是如此x将被true实例化,

Boolean x=true;

答案 2 :(得分:0)

请确保使用正确的操作员。

  • 赋值运算符(=)
  • 比较运算符(==)

所以使用==而不是=

if (x =true)在这里错了,您应该使用if (x == true)

类似地 if (x = false)在这里出错,您应该使用if (x == false)

答案 3 :(得分:0)

确实没有必要将布尔变量初始化为true并返回true,我还建议您使用boolean而不是Boolean来避免创建新的布尔对象(I& #39; m假设x是原始的。

但请尝试:

boolean x = false;

if (!x) {
           setLocale("en");
           x = true;            } 
           else  if (x)
        {
           setLocale("ar");
           x = false;           }

     return x;