- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
现在我在网页类中得到了一个嵌套的 webviewclient 类。
我覆盖了 ShouldOverrideUrlLoading,并在我的 WebView 中加载了新的 url。但在某些网址上,我只想关闭 WebView 。
我尝试将它添加到 ShouldOverrideUrlLoading 中,但我无法在其中开始/完成 Activity 。我也尝试在网页类中创建一个函数,但我未能从嵌套类中调用它。
现在我只是在按下返回时关闭 webview,但我不希望用户必须做那么多工作..
我使用 Xamarin(C#) 为 Android 开发,但 Java 答案很可能也有帮助!
[Activity (Label = "WebPage", Theme = "@android:style/Theme.NoTitleBar")]
public class WebPage : Activity
{
WebView web_view;
private class HelloWebViewClient : WebViewClient
{
public override bool ShouldOverrideUrlLoading (WebView view, string url)
{
view.LoadUrl (url);
return true;
}
}
public void dofinish()
{
var activity2 = new Intent (this, typeof(MainActivity));
activity2.PutExtra("targeturl", targeturl);
StartActivity(activity2);
Finish();
}
public string targeturl;
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
string text = Intent.GetStringExtra ("MyData") ?? "Data not available";
targeturl = Intent.GetStringExtra ("targeturl") ?? "No Target Url";
SetContentView (Resource.Layout.WebView);
web_view = FindViewById<WebView> (Resource.Id.LocalWebview);
web_view.Settings.JavaScriptEnabled = true;
web_view.LoadUrl (text);
web_view.SetWebViewClient (new HelloWebViewClient ());
}
public override void OnBackPressed()
{
var activity2 = new Intent (this, typeof(MainActivity));
activity2.PutExtra("targeturl", targeturl);
StartActivity(activity2);
Finish();
}
}
最佳答案
我建议将一个委托(delegate)传递到用于关闭 Web Activity 并使主要 Activity 重新成为焦点的 HelloWebViewClient
类。
为此:
1:声明将用于关闭 WebView Activity 的委托(delegate)类型:
public delegate void OnLinkSelectedHandler(string url);
2: 在 WebPage
中创建 OnLinkSelectedHandler
的实现,它将关闭当前 Activity 并引入 MainActivity
回到焦点:
public void dofinish(string url)
{
// Bring the other activity into focus.
var activity2 = new Intent (this, typeof(MainActivity));
activity2.AddFlags (ActivityFlags.SingleTop | ActivityFlags.ClearTop);
activity2.PutExtra("targeturl", url);
StartActivity(activity2);
// Close this activity.
Finish();
}
添加附加标志 ActivityFlags.SingleTop
和 ActivityFlags.ClearTop
将导致目标 Activity 重新获得焦点,而无需在 Activity 堆栈上创建它的新实例。
3:在 HelloWebViewClient
的 ShouldOverrideUrlLoading
方法中实现调用委托(delegate)的逻辑:
public override bool ShouldOverrideUrlLoading (WebView view, string url)
{
view.LoadUrl (url);
if (url == "http://stackoverflow.com/about")
{
this.linkSelected (url);
}
return true;
}
当所有这些都放在一起时:
[Activity (Label = "WebPage", Theme = "@android:style/Theme.NoTitleBar")]
public class WebPage : Activity
{
WebView web_view;
public delegate void OnLinkSelectedHandler (string url);
private class HelloWebViewClient : WebViewClient
{
private OnLinkSelectedHandler linkSelected;
public HelloWebViewClient(OnLinkSelectedHandler handler)
{
linkSelected = handler;
}
public override bool ShouldOverrideUrlLoading (WebView view, string url)
{
view.LoadUrl (url);
if (url == "http://stackoverflow.com/about")
{
this.linkSelected (url);
}
return true;
}
}
public void dofinish(string url)
{
// Bring the other activity into focus.
var activity2 = new Intent (this, typeof(MainActivity));
activity2.AddFlags (ActivityFlags.SingleTop | ActivityFlags.ClearTop);
activity2.PutExtra("targeturl", url);
StartActivity(activity2);
// Close this activity.
Finish();
}
public string targeturl;
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
SetContentView (Resource.Layout.WebViewTest);
web_view = FindViewById<WebView> (Resource.Id.webView1);
web_view.LoadUrl ("http://stackoverflow.com");
// Pass the callback used to close this activity.
web_view.SetWebViewClient (new HelloWebViewClient (this.dofinish));
}
}
关于c# - 如何在打开指定的 URL 时关闭 WebViewClient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19090498/
作为一名开发人员,在构建在 3G 连接的 Android webviewclient 上运行的应用程序(带有网页)时,我有过非常糟糕的经历。我的一些用户说有些页面需要 10 分钟才能加载。 (我不知道
我正在使用以下方法将 URL 加载到我的 WebView 中: mWebView.setWebviewClient(new WebViewClient); 此 URL 加载 Http 身份验证页面。用
这是我上周提出的一个问题的重新发布,得到了 2 个无效的答案。 我遵循了关于 http://developer.android.com/resources/tutorials/views/hello-
当我调用 WebView#loadUrl我希望我应该只得到一个 WebViewClient#onPageFinished打电话但没有WebViewClient#shouldOverrideUrlLoa
我是 Android 应用开发的新手。我正在设法显示 WebView 并加载给定的 URL。当我单击 WebView 中的链接时,出现空白屏幕。 当我在设备 (Galaxy TAB) 上使用 Chro
我的应用程序中有一个 webView。当一个人加载一个 url 时,该网页将加载到浏览器中,而不是我的应用程序中,因为选项菜单是默认的,而不是我分配的。我怎样才能阻止它并让它加载到我的 WebView
WebView有一个概述,这有助于理解目的、预期流程以及如何使用它,但是 WebViewClient ,出于某种原因,没有概述。 这个类的目的是什么?为什么它包含的方法有一个单独的类?其生命周期中典型
我在 S/O 上看过几篇类似的帖子,但找不到我的问题的答案。我正在尝试从 Web View 中获取 html,但无法触发“onPageFinished() 回调。我什至尝试在 WebChromeCli
下面是我的 WebViewClient 代码。我通过单击按钮调用了该类。 public void onCreate(Bundle savedInstanceState) { super
WebViewClient.onReceivedError 已弃用,现在我必须使用 onReceivedHttpError 来处理 webview 错误,但是此方法从任何资源接收错误,这不是我想要的欲
我无法理解的简短问题,我想在人们单击超链接后从我的 WebView 启动一个新的浏览器。但是我如何设置该链接的目标以逃避 WebViewClient? 这是我的代码,非常感谢任何帮助: WebView
我想问一下目的 WebViewClient.onLoadResource 当 webkit 尝试加载资源时,我们甚至可以得到这个回调但是因为它的返回类型是 void 我们可以在这个函数中做些什么???
我想创建一个 Intranet 应用程序。这个应用程序将显示内容,通常只能在我们的内部环境中访问。例如http://intranet.ourfirm.com 现在我们可以从外部访问此内容例如https
我无法理解的简短问题,我想在人们单击超链接后从我的 WebView 启动一个新的浏览器。但是我如何设置该链接的目标以逃避 WebViewClient? 这是我的代码,非常感谢任何帮助: WebView
在我的 WebView 中,标题中有多个链接。在离线模式下,我不允许重新加载页面并保持该页面不变,然后通知用户有关互联网连接的信息。如果我单击其他链接,我可以使用 shouldOverrideUrlL
问题很简单。在应用程序中,我们希望跟踪显示的当前 url。为此,我们使用来自 WebViewClient 的 shouldOverrideUrlLoading 回调,方法是在每次更新时将 url 保存
好的,所以我得到了这些错误我不知道为什么我得到这个,但它似乎对世界其他地方适用,如果有另一种方法我必须去做这件事我会改变代码但现在看来我的 eclipse 不喜欢我非常喜欢 The method on
我想捕捉本地 anchor 点击。这些 anchor 在页面内是本地的,即 href="#link_1"。捕捉这些点击的最佳方式是什么? OverrideURL 不会触发它们?我正在加载一个基于 an
我想拦截 WebViewClient 中的所有 HTTP 请求并发出我自己的请求。我遇到的问题是处理压缩响应。 有几个不同的帖子建议可行的方法(例如 AndroidHttpClient.getUngz
我在这里看到了几篇关于实现 WebviewClient 的文章,以便 webview 中的转换保留在 webview 中而不是转到浏览器。 当我尝试运行我的应用程序时,webview 加载但它仍然没有
我是一名优秀的程序员,十分优秀!