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?