2013-04-10 4 views
0

У меня возникли проблемы с попыткой установить состояние и текст togglebutton (LeftLightButton) после получения значения 1 на примере novo.charAt (0). Основная идея заключается в том, что я нажимаю кнопку, это делает webview.loadUrl, и если страница меняется на то, что я ожидал, что состояние кнопки переключения должно быть включено, если нет, оно должно оставаться выключенным и наоборот. То, как это происходит сейчас, не меняет текст ни одного состояния, если сайт не обновил значение, которое я ожидал.Android: кнопка Toggle не обновляет

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"); 
    } 


} 


} 

ответ

0

Используйте различные строки в самих файлах xml. Затем на основе состояния будет отображен соответствующий текст. Вы можете позвонить setChecked (true/false), чтобы выбрать или снять выделение с кнопки Toggle. В моем проекте он работает отлично.

android:textOff="@string/dontshowtraffic" 
    android:textOn="@string/showtraffic" 
Смежные вопросы