java - 我使用布尔错误吗?
问题描述
我正在尝试获取一个按钮来加载一个类并设置一个布尔值,然后当再次单击该按钮时它会加载另一个类..等等。我不认为它在完成后将 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 是相同的只是不同的名称。
解决方案
您应该将布尔值放在方法之外。变量“darkMode”的初始化以始终为真的方式调节算法,将此变量的初始化移至更高范围,使其位于主算法之外。
public class MainActivity extends AppCompatActivity {
private boolean darkMode = false; //put here
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (!darkMode) {
injectCSSdark();
darkMode = true;
} else {
injectCSS();
darkMode = false;
}
}
});
}
}
推荐阅读
- reactjs - 未捕获的类型错误:无法在“范围”上执行“选择节点”:参数 1 不是“节点”类型
- c++ - 在构建早期用于 ARM 的项目源时,基于 Windows,面临编译器错误“”没有这样的指令:'ldr r13,[r1]'
- java - 我只想解析第 2 节为 2 的 json。但作为响应,所有 json 文件都会解析
- mysql - 请任何人都可以为我解决此错误消息:列数与第 1 行的值计数不匹配
- java - 尝试通过套接字传递对象时出现 EOFException
- typo3 - TYPO3 系统扩展“安装”用我自己的类覆盖
- bluetooth - 我应该怎么做才能广播蓝牙?
- asp.net-mvc - mv 控制器路由属性不起作用
- android - Android/Windows 之间的蓝牙通信,缺少消息
- laravel - 如何让管理员在 laravel 中忘记密码功能?