当我使用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);
}
}
答案 0 :(得分:1)
您正在分配变量而不是仅使用作为逻辑错误的Boolean
值,而应在语句中使用x
本身:
if (x) {
setLocale("en");
x = false;
} else{
setLocale("ar");
x = true;
}
工作完成了!如果x
的值为true
,则if
语句将自行执行,但如果x
为false
,则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;