有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java 安卓 setVisibility(LinearLayout.VISIBLE)在WebView@JavascriptInterface函数中不起作用

主要活动。xml内容

<?xml version="1.0" encoding="utf-8"?>
<安卓.support.constraint.ConstraintLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    xmlns:app="http://schemas.安卓.com/apk/res-auto"
    xmlns:tools="http://schemas.安卓.com/tools"
    安卓:layout_width="match_parent"
    安卓:layout_height="match_parent"
    tools:context=".MainActivity">

    <WebView
        安卓:id="@+id/ny_web_view"
        安卓:layout_width="match_parent"
        安卓:layout_height="match_parent"/>

    <LinearLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
        安卓:id="@+id/ny_sms"
        安卓:layout_width="match_parent"
        安卓:layout_height="match_parent"
        安卓:background="@color/colorBlack"
        安卓:isScrollContainer="false"
        安卓:orientation="vertical"
        安卓:paddingLeft="10dp"
        安卓:paddingTop="10dp"
        安卓:paddingRight="10dp"
        安卓:visibility="gone"></LinearLayout>

</安卓.support.constraint.ConstraintLayout>

主要活动。java内容

package com......;

import 安卓.Manifest;
import 安卓.blablabla.and.other.imports;
...
...

public class MainActivity extends AppCompatActivity {

    static WebView mWebView;
    static LinearLayout ny_sms;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportActionBar().hide();
        setContentView(R.layout.activity_main);

        ny_sms =(LinearLayout)findViewById(R.id.ny_sms);
        mWebView = (WebView)findViewById(R.id.ny_web_view);

        mWebView.setWebViewClient(new WebViewClient());
        mWebView.loadUrl("file:///安卓_asset/main.html");
        WebSettings webSettings = mWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        mWebView.addJavascriptInterface(new WebAppInterface(this),"Android");
   }

    public static void showLayoutMA() {
        mWebView.setVisibility(WebView.INVISIBLE);
        ny_sms.setVisibility(LinearLayout.VISIBLE);
    }
}

class WebAppInterface {
    Context mContext;

    WebAppInterface(Context c) {
        mContext = c;
    }

    @JavascriptInterface
    public void showLayout() {
        MainActivity.showLayoutMA();
    }
}

梅因。html内容

<html>
  <body>
    <center>
      <a href="#" onclick="Android.showLayout()">Visiblity Test</a>
    </center>
  </body>
</html>

所有权限都可以。所有设置正常,应用程序版本28(安卓9派)

im点击“可视性测试”链接不更改任何屏幕活动, 滚动到底部后,单击顶部栏上的“切换自动旋转屏幕”按钮 自动刷新并在webview控件前面显示线性布局

如何解决这个问题

单击“可视性测试”后,不显示线性布局和webView不可见。之后需要一个提神的动作

对不起,我的英语不好:(


共 (1) 个答案

  1. # 1 楼答案

    我发现了这个问题, 返回错误“只有创建视图层次结构的原始线程才能接触其视图”

    那么你需要我:runOnUiThread()

    扩展此代码

    public static void showLayoutMA() {
        CurrentActivitiy.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            //mWebView.setVisibility(WebView.INVISIBLE);
            ny_sms.setVisibility(LinearLayout.VISIBLE);
        }
    });
    

    为什么不使用直接rununuithread(newrunnable(){}函数,因为我的函数是静态的,所以我添加MainActivity的“CurrentActivitiy”声明

    static Activity CurrentActivitiy;
    CurrentActivitiy = (Activity)MainActivity.this;
    

    在几个小时的幸福结局之后,问题就解决了