前面已經介紹,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() {
@Override
public 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進行不同分析。