oschina-app源碼解析-webview處理超鏈接

  前面已經介紹,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進行不同分析。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章