oschina-app源码解析-webview处理超链接

来源:互联网 发布:php构造方法怎么写 编辑:程序博客网 时间:2024/06/03 01:42

  前面已经介绍,oschina-app源码解析-webview重组html,在这个过程中还有些细节性的问题,分别介绍下,首先介绍下webview来处理超链接。

  方法就是实现WebViewClient里的 shouldOverrideUrlLoading的方法,来处理超链接被点击后的具体操作,oschina-app操作:

   1、分析url,获取资源类型、和资源id

   2、根据资源类型,跳转到对应的资源内容页面,并根据id加载数据。

上代码:

mWebView.setWebViewClient(UIHelper.getWebViewClient());


WebViewClient实现:

/** * 获取webviewClient对象 *  * @return */public static WebViewClient getWebViewClient() {return new WebViewClient() {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {showUrlRedirect(view.getContext(), url);return true;}};}


根据url实现跳转:

/** * url跳转 *  * @param context * @param url */public static void showUrlRedirect(Context context, String url) {URLs urls = URLs.parseURL(url);if (urls != null) {showLinkRedirect(context, urls.getObjType(), urls.getObjId(),urls.getObjKey());} else {openBrowser(context, url);}}public static void showLinkRedirect(Context context, int objType,int objId, String objKey) {switch (objType) {case URLs.URL_OBJ_TYPE_NEWS:showNewsDetail(context, objId);break;case URLs.URL_OBJ_TYPE_QUESTION:showQuestionDetail(context, objId);break;case URLs.URL_OBJ_TYPE_QUESTION_TAG:showQuestionListByTag(context, objKey);break;case URLs.URL_OBJ_TYPE_SOFTWARE:showSoftwareDetail(context, objKey);break;case URLs.URL_OBJ_TYPE_ZONE:showUserCenter(context, objId, objKey);break;case URLs.URL_OBJ_TYPE_TWEET:showTweetDetail(context, objId);break;case URLs.URL_OBJ_TYPE_BLOG:showBlogDetail(context, objId);break;case URLs.URL_OBJ_TYPE_OTHER:openBrowser(context, objKey);break;}}


URLs urls = URLs.parseURL(url);这句话其实就是解析url为两个参数:链接类型,和对应新闻条目的ID,这个代码根据不同url进行不同分析。

0 0
原创粉丝点击