0

例如,在 novo.charAt(0) 接收到值 1 后,我在尝试设置切换按钮 (LeftLightButton) 状态和文本时遇到了一些问题。主要思想是,我单击按钮,它会生成 webview.loadUrl,如果页面更改为我预期的切换按钮状态应该打开,如果不是,它必须保持关闭,反之亦然。现在的方式,如果网站没有更新到我期望的值,也不会改变文本。

public class MainActivity extends Activity {

private WebView webView;
private ToggleButton LeftLightButton;
private Thread webviewthread;
private String baseURL;

private boolean LeftLightButtonState;

public void onCreate(Bundle savedInstanceState) {

    final Context context = this;
    baseURL = "http://192.168.1.4/i.php";

    LeftLightButton = (ToggleButton) findViewById(R.id.toggleButton1);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

     runOnUiThread(new Runnable() {
            public void run()
            {
                synchronized(this) {
                    webView = (WebView) findViewById(R.id.webView1);

                    webView.getSettings().setJavaScriptEnabled(true);
                    webView.addJavascriptInterface(context, "HTMLOUT");

                    webView.setWebViewClient(new WebViewClient() {
                        @Override
                        public void onPageFinished(WebView view, String url) {
                            webView.loadUrl("javascript:window.HTMLOUT.processHTML('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
                        }
                    });

                    webView.loadUrl(baseURL);
                }
            }
        });

    showToast("Getting current status...");

}

public void notify(final boolean state, final ToggleButton buttonName) {

    Thread thread = new Thread() {
        @Override
        public void run() {
            synchronized (this) {
                try {
                    wait(1000);
                    final ToggleButton button = (ToggleButton) findViewById(R.id.toggleButton1);
                    if (!state && button.isChecked()) {
                        showToast("Couldnt turn OFF");
                        // UI
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {

                                button.setChecked(false);
                                button.setTextOff("OFF");
                            }
                        });
                        // end of UI

                    }
                    if (state && !button.isChecked()) {
                        showToast("Couldnt turn ON");
                        // UI
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {

                                button.setChecked(true);
                                button.setTextOn("ON");
                            }
                        });
                        // end of UI
                    }
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } 
            }


        }
    };
    thread.start();

}

public void showToast(final String toast)
{
    runOnUiThread(new Runnable() {
        public void run()
        {
            Toast.makeText(MainActivity.this, toast, Toast.LENGTH_SHORT).show();
        }
    });
}

public void onClick(View arg0) {

    final int id = arg0.getId();
    switch (id) {
    case R.id.toggleButton1:
        if (LeftLightButtonState == true) {
            webView.loadUrl(baseURL+"?L=0");
            notify(false, LeftLightButton);
        } else {
            webView.loadUrl(baseURL+"?L=1");
            notify(true, LeftLightButton);
        }
        break;
    // even more buttons here
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

public void processHTML(String html) { // <html> <body> 1 0 0 0 </body> </html>
    LeftLightButton = (ToggleButton) findViewById(R.id.toggleButton1);
    String novo = android.text.Html.fromHtml(html).toString();
    System.out.println("RECEIVED: "+novo);

    if (novo != null) {
        if (novo.charAt(0) == '0') {
            LeftLightButtonState = false;       
            LeftLightButton.setTextOff("OFF");
            LeftLightButton.setChecked(false);

        }
        if (novo.charAt(0) == '1') {
            LeftLightButtonState = true;
            LeftLightButton.setTextOn("ON");
            LeftLightButton.setChecked(true);

        }
        System.out.println("CHEGUEI");
    }


}


}
4

1 回答 1

0

在 xml 文件本身中使用不同的字符串。然后根据状态显示适当的文本。您可以调用 setChecked(true/false) 来选择或取消选择切换按钮。它在我的项目中工作正常。

    android:textOff="@string/dontshowtraffic"
    android:textOn="@string/showtraffic"
于 2013-04-10T00:16:07.357 回答