Android Webview无法从按钮监听器加载URL。

huangapple go评论114阅读模式
英文:

Android Webview doesn't load the Url from button listener

问题

  1. WebView wbvCheckURL;
  2. Button btnSearch;
  3. @Override
  4. public void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7. wbvCheckURL = findViewById(R.id.wbvCheckURL);
  8. btnSearch = findViewById(R.id.btnSearch);
  9. wbvCheckURL.setWebChromeClient(new WebChromeClient() {
  10. @Override
  11. public void onProgressChanged(WebView view, int newProgress) {
  12. ...
  13. }
  14. @Override
  15. public void onReceivedTitle(WebView view, String title) {
  16. ...
  17. }
  18. });
  19. wbvCheckURL.getSettings().setJavaScriptEnabled(true);
  20. wbvCheckURL.setWebViewClient(new WebViewClient());
  21. // When i do it like this it works:
  22. // wbvCheckURL.loadUrl("http://www.google.de");
  23. btnSearch.setOnClickListener(new View.OnClickListener() {
  24. public void onClick(View v) {
  25. wbvCheckURL.loadUrl("http://www.google.de");
  26. hideKeyboard(v);
  27. LoadCode();
  28. }
  29. });
  30. }
英文:

It loads the site but only when it's not in the Action Listener.
Even if I load the url way down in the onCreate method it works.
I already checked if the Webview is invisible, the button listener works also.

The problem began after a few hours of coding other things

<!-- begin snippet: js hide: false console: true babel: false -->

<!-- language: lang-js -->

  1. WebView wbvCheckURL;
  2. Button btnSearch;
  3. @Override
  4. public void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7. wbvCheckURL = findViewById(R.id.wbvCheckURL);
  8. btnSearch = findViewById(R.id.btnSearch);
  9. wbvCheckURL.setWebChromeClient(new WebChromeClient() {
  10. @Override
  11. public void onProgressChanged(WebView view, int newProgress) {
  12. ...
  13. }
  14. @Override
  15. public void onReceivedTitle(WebView view, String title) {
  16. ...
  17. }
  18. });
  19. wbvCheckURL.getSettings().setJavaScriptEnabled(true);
  20. wbvCheckURL.setWebViewClient(new WebViewClient());
  21. // When i do it like this it works:
  22. // wbvCheckURL.loadUrl(&quot;http://www.google.de&quot;);
  23. btnSearch.setOnClickListener(new View.OnClickListener() {
  24. public void onClick(View v) {
  25. wbvCheckURL.loadUrl(&quot;http://www.google.de&quot;);
  26. hideKeyboard(v);
  27. LoadCode();
  28. }
  29. });
  30. }

<!-- end snippet -->

答案1

得分: 0

解决方案是在线程中加载它

> 创建实例并启动线程:

  1. LoadURL t = new LoadURL();
  2. t.start();

> 线程类:

  1. class LoadURL extends Thread {
  2. public void run() {
  3. Classname.wbvCheckURL.post(new Runnable() {
  4. public void run() {
  5. Classname.wbvCheckURL.loadUrl("http://www.google.de");
  6. }
  7. });
  8. }
英文:

The Solution is to load it in a Thread

> Create instance and start the thread:

  1. LoadURL t = new LoadURL();
  2. t.start();

> Thread class:

  1. class LoadURL extends Thread {
  2. public void run() {
  3. Classname.wbvCheckURL.post(new Runnable() {
  4. public void run() {
  5. Classname.wbvCheckURL.loadUrl(&quot;http://www.google.de&quot;);
  6. }
  7. });
  8. }

答案2

得分: 0

你可以尝试使用我的代码。我的代码中包含另一种带有抽屉布局(Drawer Layout)的 Web 视图(WebView)。希望你能理解如何插入 Web 视图。

  1. package com.example.appname;
  2. import android.content.Intent;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.webkit.WebSettings;
  6. import android.webkit.WebView;
  7. import android.webkit.WebViewClient;
  8. import android.widget.ImageButton;
  9. import androidx.appcompat.app.AppCompatActivity;
  10. import androidx.appcompat.widget.Toolbar;
  11. public class Provokinc extends AppCompatActivity {
  12. private WebView webView;
  13. @Override
  14. protected void onCreate(Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.activity_provokinc);
  17. Toolbar toolbar = findViewById(R.id.toolbar);
  18. setSupportActionBar(toolbar);
  19. webView = findViewById(R.id.webView);
  20. webView.setWebViewClient(new WebViewClient());
  21. webView.loadUrl("https://stackoverflow.com/questions/63438455/android-webview-doesnt-load-the-url-from-button-listener");
  22. WebSettings webSettings = webView.getSettings();
  23. webSettings.setJavaScriptEnabled(true);
  24. ImageButton ImageButton = findViewById(R.id.imageButtonA);
  25. ImageButton ImageButton1 = findViewById(R.id.imageButtonB);
  26. ImageButton ImageButton2 = findViewById(R.id.imageButtonC);
  27. ImageButton ImageButton3 = findViewById(R.id.imageButtonD);
  28. ImageButton ImageButton4 = findViewById(R.id.imageButtonE);
  29. ImageButton.setOnClickListener(new View.OnClickListener() {
  30. @Override
  31. public void onClick(View v) {
  32. Intent int1 = new Intent(Provokinc.this, Main3Activity.class);
  33. startActivity(int1);
  34. }
  35. });
  36. ImageButton1.setOnClickListener(new View.OnClickListener() {
  37. @Override
  38. public void onClick(View v) {
  39. Intent int2 = new Intent(Provokinc.this, Main2Activity.class);
  40. startActivity(int2);
  41. }
  42. });
  43. ImageButton2.setOnClickListener(new View.OnClickListener() {
  44. @Override
  45. public void onClick(View v) {
  46. Intent int3 = new Intent(Provokinc.this, Provokinc.class);
  47. startActivity(int3);
  48. }
  49. });
  50. ImageButton3.setOnClickListener(new View.OnClickListener() {
  51. @Override
  52. public void onClick(View v) {
  53. Intent int4 = new Intent(Provokinc.this, ActivityItemDetails.class);
  54. startActivity(int4);
  55. }
  56. });
  57. ImageButton4.setOnClickListener(new View.OnClickListener() {
  58. @Override
  59. public void onClick(View v) {
  60. Intent int5 = new Intent(Provokinc.this, MainActivity.class);
  61. startActivity(int5);
  62. }
  63. });
  64. }
  65. @Override
  66. public void onBackPressed(){
  67. if(webView.canGoBack()){
  68. webView.goBack();
  69. } else{
  70. super.onBackPressed();
  71. }
  72. }
  73. }
英文:

you can try mine. Mine is another kind of webview with Drawer Layout. Hope you get the idea on how to insert the webview.

  1. package com.example.appname;
  2. import android.content.Intent;
  3. import android.os.Bundle;
  4. import android.view.Menu;
  5. import android.view.MenuItem;
  6. import android.view.View;
  7. import android.webkit.WebSettings;
  8. import android.webkit.WebView;
  9. import android.webkit.WebViewClient;
  10. import android.widget.ImageButton;
  11. import androidx.appcompat.app.AppCompatActivity;
  12. import androidx.appcompat.widget.ShareActionProvider;
  13. import androidx.appcompat.widget.Toolbar;
  14. import androidx.core.view.MenuItemCompat;
  15. public class Provokinc extends AppCompatActivity {
  16. private WebView webView;
  17. @Override
  18. protected void onCreate(Bundle savedInstanceState) {
  19. super.onCreate(savedInstanceState);
  20. setContentView(R.layout.activity_provokinc);
  21. Toolbar toolbar = findViewById(R.id.toolbar);
  22. setSupportActionBar(toolbar);
  23. webView = findViewById(R.id.webView);
  24. webView.setWebViewClient(new WebViewClient());
  25. webView.loadUrl(&quot;https://stackoverflow.com/questions/63438455/android-webview-doesnt-load-the-url-from-button-listener&quot;);
  26. WebSettings webSettings = webView.getSettings();
  27. webSettings.setJavaScriptEnabled(true);
  28. ImageButton ImageButton = (ImageButton) findViewById(R.id.imageButtonA);
  29. ImageButton ImageButton1 = (ImageButton) findViewById(R.id.imageButtonB);
  30. ImageButton ImageButton2 = (ImageButton) findViewById(R.id.imageButtonC);
  31. ImageButton ImageButton3 = (ImageButton) findViewById(R.id.imageButtonD);
  32. ImageButton ImageButton4 = (ImageButton) findViewById(R.id.imageButtonE);
  33. ImageButton.setOnClickListener(new View.OnClickListener() {
  34. @Override
  35. public void onClick(View v) {
  36. Intent int1 = new Intent(Provokinc.this,Main3Activity.class);
  37. startActivity(int1);
  38. }
  39. });
  40. ImageButton1.setOnClickListener(new View.OnClickListener() {
  41. @Override
  42. public void onClick(View v) {
  43. Intent int2 = new Intent(Provokinc.this, Main2Activity.class);
  44. startActivity(int2);
  45. }
  46. });
  47. ImageButton2.setOnClickListener(new View.OnClickListener() {
  48. @Override
  49. public void onClick(View v) {
  50. Intent int3 = new Intent(Provokinc.this, Provokinc.class);
  51. startActivity(int3);
  52. }
  53. });
  54. ImageButton3.setOnClickListener(new View.OnClickListener() {
  55. @Override
  56. public void onClick(View v) {
  57. Intent int4 = new Intent(Provokinc.this, ActivityItemDetails.class);
  58. startActivity(int4);
  59. }
  60. });
  61. ImageButton4.setOnClickListener(new View.OnClickListener() {
  62. @Override
  63. public void onClick(View v) {
  64. Intent int5 = new Intent(Provokinc.this, MainActivity.class);
  65. startActivity(int5);
  66. }
  67. });
  68. }
  69. @Override
  70. public void onBackPressed(){
  71. if(webView.canGoBack()){
  72. webView.goBack();
  73. } else{
  74. super.onBackPressed();
  75. }
  76. }
  77. }

huangapple
  • 本文由 发表于 2020年8月16日 23:09:05
  • 转载请务必保留本文链接:https://go.coder-hub.com/63438455.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定