【发布时间】:2021-02-26 23:38:52
【问题描述】:
我正在尝试获取一个按钮来加载一个类并设置一个布尔值,然后当再次单击该按钮时它会加载另一个类..等等。我不认为它在完成后将 MODE 设置为 false,是我的代码有问题吗?
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
boolean darkMode = false;
public void onClick(View v) {
if(!darkMode){
injectCSSdark();
darkMode = true;
} else {
injectCSS();
darkMode = false;
}
}
});
调试代码:
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
boolean darkMode = false;
public void onClick(View v) {
Log.d("mode", "onClick: 1 " + darkMode);
if(!darkMode){
injectCSSdark();
darkMode = true;
Log.d("mode", "onClick: 2 " + darkMode);
} else {
injectCSS();
darkMode = false;
Log.d("mode", "onClick: 3 " + darkMode);
}
}
});
private void injectCSS() {
try {
Log.d("mode", "injectCSS!");
InputStream inputStream = getAssets().open("style.css");
byte[] buffer = new byte[inputStream.available()];
inputStream.read(buffer);
inputStream.close();
String encoded = Base64.encodeToString(buffer, Base64.NO_WRAP);
wv.loadUrl("javascript:(function() {" +
"var parent = document.getElementsByTagName('head').item(0);" +
"var style = document.createElement('style');" +
"style.type = 'text/css';" +
// Tell the browser to BASE64-decode the string into your script !!!
"style.innerHTML = window.atob('" + encoded + "');" +
"parent.appendChild(style)" +
"})()");
Log.d("mode", "injectCSS! end");
} catch (Exception e) {
e.printStackTrace();
}
}
injectCSSDark 是一样的只是名字不同。
【问题讨论】:
-
三件事,似乎都不是你的问题:(1)名称
MODE(全部大写)表示一个常数。它应该是小写的。 (2) 不要比较布尔值;就说if (!mode)。 (三)“模式”名称不明确;根据您的方法名称,它可能应该是darkMode。 -
代码看起来不错,所以如果它不起作用,那么它现在在此处共享的代码中。
-
对于更新后的问题,
else之后的if (darkMode)部分是多余的。删除它。 -
我认为你不需要 else if 条件,只需要一个 else。
-
是的,通常你首先执行 if / else 的积极部分,但这不是一个硬性规则。不过,它有助于提高可读性。
标签: java android-studio boolean