Java TextView在创建新活动后未更新

Java TextView在创建新活动后未更新,java,android,android-activity,view,textview,Java,Android,Android Activity,View,Textview,我对安卓系统还不熟悉,我被卡住了。我有一个关于活动的文本视图,它应该会显示结果,但由于某种原因,只有当你们点击并没有做任何事情的按钮,或者你们关闭应用程序并从运行应用程序的菜单中再次打开它时,它才会更新文本视图。我想这与更新活动有关。提前谢谢你 package com.example.visacheck; import android.content.Intent; import android.os.Bundle; import android.webkit.JavascriptInterf

我对安卓系统还不熟悉,我被卡住了。我有一个关于活动的文本视图,它应该会显示结果,但由于某种原因,只有当你们点击并没有做任何事情的按钮,或者你们关闭应用程序并从运行应用程序的菜单中再次打开它时,它才会更新文本视图。我想这与更新活动有关。提前谢谢你

package com.example.visacheck;

import android.content.Intent;
import android.os.Bundle;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

public class FourthActivity extends AppCompatActivity {

    String aplicationNumber;
    String type;
    String year;


    @Override
    protected void onCreate(Bundle savedInstanceState) {

        this.getSupportActionBar().hide();
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fourth);

        Intent intent = getIntent();
        final Button button = findViewById(R.id.resultButton); //Result appearing only after clicking button

        aplicationNumber =  intent.getStringExtra("aplicationNumber");
        type = intent.getStringExtra("type");
        year = intent.getStringExtra("year");

            class MyJavaScriptInterface {
                @JavascriptInterface
                @SuppressWarnings("unused")
                public void processHTML(String html) {
                    TextView text = findViewById(R.id.textView);
                    text.setText(html);
                }
            }


            final WebView myWebview = findViewById(R.id.webview);
            myWebview.getSettings().setJavaScriptEnabled(true);
            myWebview.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT");

            myWebview.setWebViewClient(new WebViewClient() {
                @Override
                public void onPageFinished(WebView view, String url) {

                    myWebview.loadUrl(("javascript:document.getElementById('edit-ioff-application-number').value = '" + aplicationNumber + "';void(0);"));
                    myWebview.loadUrl(("javascript:" + "document.getElementById('edit-ioff-application-code').value = '" + type + "';void(0);"));
                    myWebview.loadUrl(("javascript:document.getElementById('edit-ioff-application-year').value = '" + year + "';void(0);"));
                    myWebview.loadUrl(("javascript:document.getElementById('edit-submit-button').click();"));
                    myWebview.loadUrl("javascript:window.HTMLOUT.processHTML(document.getElementsByClassName('alert alert-warning')[0].innerText);");
                    myWebview.loadUrl("javascript:window.HTMLOUT.processHTML(document.getElementsByClassName('alert alert-success')[1].innerText);");
                    myWebview.loadUrl("javascript:window.HTMLOUT.processHTML(document.getElementsByClassName('alert alert-danger')[0].innerText);");

                }
            });
            myWebview.loadUrl("https://frs.gov.cz/ioff/application-status");
    }

}

我不会在这方面做得很好,因为我自己几乎不能触及这个问题。也许有更多知识的人可以深入了解更多细节,但这里的总体想法是,JS线程调用此代码,而不是您的UI线程(这是唯一允许处理UI更新的线程),老实说,我很惊讶此代码在执行此操作时没有崩溃。
post()
方法将此添加到视图的消息队列中,这意味着文本将在视图呈现后更新,并且没有其他任务要执行。我知道我在解释这一点时做得不好,但有关更多信息,请参考以下内容:

或者,您可以使用用户
runOnUIThread()
,例如:

我相信很多人已经比我更好地解释了这一点。但是这里要了解的最重要的一点是,除了UI线程之外,您不能更新UI

请注意,我任意选择了
myWebView
,如果发布到片段的主视图中,这应该也可以

class MyJavaScriptInterface {
        @JavascriptInterface
        @SuppressWarnings("unused")
        public void processHTML(final String html) {
            myWebview.post(new Runnable() {
                @Override public void run() {
                    TextView text = findViewById(R.id.textView); text.setText(html);
                }
            });
        }
    }

你能分享一下这个按钮在onClick中做了什么吗?有趣的是,没有onClick方法,这个按钮没有做任何事情,只是存在,但是如果你点击它,TextView正在刷新你是说从html设置的TextView吗?当你加载页面时,它还没有完成html的加载,因此文本视图还没有设置,当你从运行的应用程序中打开它时,它会恢复并已经有数据。你能试试这个吗
myWebView.post(new Runnable(){@Override public void run(){TextView text=findViewById(R.id.TextView);text.setText(html);});
insde-your-processHTMLfunction@sharone-lev我想你是对的,但我如何设置条件,只有在最终加载html时才更新textview?