Android Studio中Java代码在onLoadResource回调设置TextView文本不生效如何解决
问题原因
WebViewClient的onLoadResource回调默认运行在子线程,Android系统强制要求所有UI控件的更新操作必须在主线程(UI线程)执行,子线程调用setText不会生效,严重时还会触发应用闪退。- 你提供的代码未对
webView做初始化绑定,也没有调用加载地址的逻辑,webView的相关回调根本不会触发。
解决方案
先补全webView的初始化逻辑,再将setText操作切换到主线程执行,修改后的代码如下:
public class account extends AppCompatActivity { TextView textview; WebView webView; // 声明WebView控件 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); // 绑定布局控件 textview = (TextView)findViewById(R.id.text); webView = (WebView)findViewById(R.id.web); // 此处替换为你xml文件里WebView对应的id webView.getSettings().setJavaScriptEnabled(true); webView.setWebViewClient(new WebViewClient() { @Override public void onLoadResource(WebView view, String url) { // 切换到主线程执行UI更新 runOnUiThread(new Runnable() { @Override public void run() { textview.setText("Register"); } }); } }); // 给webView设置加载地址,触发资源加载回调 webView.loadUrl("https://你需要加载的目标网址"); } }
补充排查点
如果修改后仍不生效,可依次核对以下项:
- 确认xml布局中已正确添加WebView控件,且id和Java代码中绑定的id完全一致
- 确认
webView.loadUrl被正常调用,WebView确实触发了资源加载流程 - 可在
onLoadResource中添加日志打印,确认回调确实被执行,排除回调未触发的问题
内容的提问来源于stack exchange,提问作者Priya Bhaduriya
相关产品推荐
相关产品推荐

