【问题标题】:am I using boolean wrong?我使用布尔错误吗?
【发布时间】: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


【解决方案1】:

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

        }
    });
    }
}

【讨论】:

猜你喜欢
  • 2014-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-02
  • 2015-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多