2013-04-10 1 views
0

내가 예를 들어 novo.charAt (0)에 값 1을받은 후 (LeftLightButton) 상태와 텍스트를 ToggleButton을 설정하려고 몇 가지 문제가 있습니다. 주요 아이디어는 버튼을 클릭하면 webview.loadUrl이 만들어지고, 페이지가 바뀌면 예상되는 토글 버튼 상태가 켜져 있어야합니다. 그렇지 않으면 켜져 있어야하며 반대의 경우도 마찬가지입니다. 현재의 방식은 사이트가 didnt 할 때 예상했던 값으로 업데이트하지 않은 상태에서 텍스트를 변경하지 않습니다.안드로이드 : 토글 버튼 나던 업데이트

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)를 호출하여 토글 버튼을 선택하거나 선택 취소 할 수 있습니다. 프로젝트에서 정상적으로 작동합니다.

android:textOff="@string/dontshowtraffic" 
    android:textOn="@string/showtraffic"