package com.mozz.htmlnative.view; import android.content.Context; import android.support.annotation.NonNull; import android.util.ArrayMap; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.webkit.WebView; import android.widget.FrameLayout; import android.widget.ScrollView; import java.util.LinkedList; import java.util.List; import java.util.Map; /** * @author Yang Tao, 17/3/8. */ public final class HNRootView extends ScrollView { private final Map<String, View> mViewWithId = new ArrayMap<>(); private static final String TAG = HNRootView.class.getSimpleName(); private FrameLayout mContentView; @NonNull private List<WebView> mWebViewList = new LinkedList<>(); public HNRootView(@NonNull Context context) { super(context); mContentView = new FrameLayout(context); super.addView(mContentView, new FrameLayout.LayoutParams(FrameLayout.LayoutParams .MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)); } @Override public void onViewAdded(View child) { super.onViewAdded(child); if (child instanceof WebView) { mWebViewList.add((WebView) child); } } @Override public void onViewRemoved(View child) { super.onViewRemoved(child); if (child instanceof WebView) { mWebViewList.remove(child); } } public void addContent(View v, ViewGroup.LayoutParams layoutParams) { mContentView.addView(v, layoutParams); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); List<WebView> tempWebViewList = mWebViewList; mWebViewList.clear(); for (WebView webView : tempWebViewList) { if (webView != null) { webView.destroy(); } } } public View findViewById(@NonNull String id) { return mViewWithId.get(id); } public View putViewWithId(String id, View view) { View before = mViewWithId.put(id, view); if (before != null) { Log.w(TAG, "Duplicated id " + id + ", before is " + before + ", current is " + view); } return before; } public String allIdTag() { return mViewWithId.toString(); } public boolean containsView(String id) { return mViewWithId.containsKey(id); } }