我创建了一个类来扩展android的 WebViewClient
因此,我可以使它成为一个'预览'只客户端-即大多数导航是不允许的。
当用户尝试导航时,我想弹出一个 toast
提醒他们,他们是在一个有限的预览视图,他们不能进一步导航。
但是吐司需要一个活动 Context
.
为了使 Context
我可以分配一个 context
到一个变量( appContext
)在类的构造函数中,如下所示:
public class nonInteractiveWebViewClient extends WebViewClient {
public boolean canBrowse = false;
public Context appContext;
public nonInteractiveWebViewClient(Context context) {
appContext = context;
}
@Override
public boolean shouldOverrideKeyEvent (WebView view, KeyEvent event) {
return true;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
String host = Uri.parse(view.getUrl()).getHost();
canBrowse = // logic here to determine whether to allow navigation
if (canBrowse) {
return false;
} else {
Toast.makeText(appContext, appContext.getString(R.string.link_test_preview_only), Toast.LENGTH_SHORT).show();
return true;
}
}
}
当我创建 nonInteractiveWebViewClient
调用中的对象 activity
我称之为 getApplicationContext()
通过考试 context
给建造师。
这是个坏主意吗?
正如@sajjad之前提到的, shouldOverrideUrlLoading
有权访问 view
以及 getContext()
可以在视图上运行,因此 appContext
变量在这个exmaple中是多余的,但是。。。
我还打算在另一个类中使用此模式,该类包含多个活动使用的许多方法,并且需要访问
activity context
在很多方法中。这些方法是独立函数,不扩展任何可能访问 context
. 在另一个类中使用上述方法将简化我的代码并减少对 getApplicationContext
调用活动需要做的,但我担心它可能会导致内存泄漏或什么的。
这是个坏方法吗?
(回答时,请注意我是一名工程师,虽然我对编程的基本理论有一定的了解,但我绝不是一名cs。我喜欢编写尽可能模块化的代码,并尽可能避免代码重复,因此我用这种方式来解决这个问题。)
暂无答案!
目前还没有任何答案,快来回答吧!