Android HTML按钮onclick事件

时间:2014-03-03 17:27:37

标签: android html android-activity android-webview android-websettings

我在本地HTML页面中显示图像,并有一个用于点击事件的按钮。单击此按钮时,我需要调用另一个活动。它正在发挥作用。但问题是在转向另一个然后回到HTML页面后,图像没有显示,应用程序无法正常工作。

<script language="javascript">
function validClick() {
    valid.performClick();
    document.getElementById("ok").value = "start";
}
function refuseClick(){
    refuse.performClick();
    document.getElementById("no").value = "Je refuse";
}

<div>
<button type="button" id="ok"
    style="font-weight: 700; margin-right: 20px;" onclick="validClick();">Start</button>

</div>

HTML页面包含图片:

<li><a class="box" href="products.html" data-transition="fade" > <img src="img/products.png" alt="Products"> <span class="text"> Products</span> 

MainActivity:

public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.about_screen);


        WebView  webview = (WebView) findViewById(R.id.webview);
        webview.loadUrl("file:///android_asset/index.html");

        valid = new Button(this);
        valid.setOnClickListener(this);
        refuse = new Button(this);
        refuse.setOnClickListener(this);

     // Enablejavascript
        WebSettings ws = webview.getSettings();
        ws.setJavaScriptEnabled(true);
        // Add the interface to record javascript events
        webview.addJavascriptInterface(valid, "valid");
        webview.addJavascriptInterface(refuse, "refuse");

 }


    @Override
    public void onClick(View v) {
        if (v.equals(valid)) {

        Intent i = new Intent(this, CloudReco.class);
        startActivity(i);
        } else if (v.equals(refuse)) {
            //do Something else }
    }

2 个答案:

答案 0 :(得分:3)

您需要检查一些代码。

首先,在您的HTML中,顶部的<script>标记未关闭。请在最后一个函数定义后添加</script>

其次,在Java中,请在调用loadUrl之前配置WebView。应首先注册设置和JavaScript接口。

第三,没有必要使用Button小部件来实现您正在寻找的效果。这样的事情应该是完全足够的:

webview.addJavaScriptInterface(new Object() {
    @JavaScriptInterface
    public void performClick() {
        Intent i = new Intent(this, CloudReco.class);
        startActivity(i);
    }
}, "valid");

和类似的&#34;拒绝&#34;。

答案 1 :(得分:0)

下一个&#34;奇怪&#34;方法我曾用过很多javascript事件(最后一次使用是来自滚动事件,我也传递了连接的值):

webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.contains("button1Event")) {
            // button1 was clicked inside webview html
            Toast.makeText(context, 'Button1WasClicked', Toast.LENGTH_SHORT);  
            return true; (to avoid a default redirect to the url)
         } else if (url.contains("button2Event")) {
            // button2 was clicked inside webview html
            Toast.makeText(context, 'Button2WasClicked', Toast.LENGTH_SHORT);  
            return true; (to avoid a default redirect to the url)
         }
         return false;
      }
}

HTML包含一个虚拟<a>元素,用于模拟URLclick,其中URL是我们在本机代码中等待的KEY:

<!DOCTYPE html>
<html>
<body>
<a id='yourLinkID'></a>

<button onclick="myFunction('button1Event')">Button1</button>
<button onclick="myFunction('button2Event')">Button2</button>

<script>
function myFunction(value) {
    document.getElementById('yourLinkID').href = 'testtest' + value; 
    document.getElementById('yourLinkID').click();
// we set the wanted URL and simulate the click
}
</script>

</body>
</html>