首页 > 解决方案 > 我使用布尔错误吗?

问题描述

我正在尝试获取一个按钮来加载一个类并设置一个布尔值,然后当再次单击该按钮时它会加载另一个类..等等。我不认为它在完成后将 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 是相同的只是不同的名称。

标签: javaandroid-studioboolean

解决方案


您应该将布尔值放在方法之外。变量“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;
            }

        }
    });
    }
}

推荐阅读