2017-10-21 88 views
1

我嘗試在加載時獲取當前活動中的所有WebView元素,並獲取輸出。
它的工作完美。如何獲得Chid Layout的孩子?

代碼:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.dmp_webview.MainActivity" 
    android:orientation="vertical"> 

     <WebView 
      android:id="@+id/simpleWebView" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_marginTop="20dp" 
      android:scrollbars="none" /> 

     <WebView 
      android:id="@+id/simpleWebView2" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_marginTop="20dp" 
      android:scrollbars="none" /> 
</LinearLayout> 

private void forWebviews() { 

    final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this 
      .findViewById(android.R.id.content)).getChildAt(0); 

    int elementSize = getWenViews(viewGroup).size(); 
    for(int j =0; j< elementSize;j++) 
    {   
     WebView getAllWebView = formIsValid(viewGroup).get(j); 
     String SplitTypeWebView = String.valueOf(getAllWebView); 
     String getWebValues = getAllWebView.getUrl().toString(); 
     SplitWebViewID(SplitTypeWebView); 
    } 
} 

    private ArrayList<WebView> getWenViews(ViewGroup viewGroup) { 

     ArrayList<WebView> webview = new ArrayList<WebView>(); 
     for (int i = 0; i < viewGroup.getChildCount(); i++) { 
      View v = viewGroup.getChildAt(i); 
      if (v instanceof WebView) { 
       webview.add((WebView) v); 
      } 
     } 
     return webview; 
    } 

但是當我多一個的LinearLayout(不僅LinearLayout中其他的佈局也)對的WebView父意味着這個樣子,

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.dmp_webview.MainActivity" 
    android:orientation="vertical"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="#ffffff" 
     android:orientation="vertical" 
     android:padding="16dp" 
     android:id="@+id/RootLayout_1"> 

      <WebView 
       android:id="@+id/simpleWebView" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_marginTop="20dp" 
       android:scrollbars="none" /> 

      <WebView 
       android:id="@+id/simpleWebView2" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_marginTop="20dp" 
       android:scrollbars="none" /> 

    </LinearLayout> 

</LinearLayout> 

它不工作正常。爲什麼?它不會返回子視圖計數。我需要澄清一件事情。

  • 是否有可能得到所有的孩子佈局的孩子。 (例如) 根佈局 - >的LinearLayout(一些其它佈局) - >的LinearLayout(一些其它佈局)-views

PLZ引導me.Actually我得到根佈局和迭代。 如何在運行時獲取所有子視圖?這與多少個根佈局或子佈局或視圖無關。我需要全部。

+0

的'#的ViewGroup * getChild()'方法只處理直接子'View's,所以你沒有在嵌套的ViewGroup中獲得這些'WebView'。在'getWenViews()'中,如果孩子是另一個'ViewGroup','if'需要'else if' - else if(v instanceof ViewGroup){webview.addAll(getWenViews((ViewGroup)v)) ; }' –

+0

您是否試圖在佈局中獲取所有'WebView'或者在特定的'ViewGroup'中獲取所有'WebView's? – Titus

+0

@MikeM。是的,邁克你是對的,它會得到直接的子視圖,根據邏輯我需要添加其他如果檢查其他viewgroup.i會嘗試並更新給你 – Moorthy

回答

0

需要得到所有視圖(如果可能的手段需要他們兩個也無所謂的ViewGroup /的WebView)

您可以使用遞歸方法爲。

下面是一個例子:

private static void getViews(list, ViewGroup viewGroup){ 
    for(int i = 0; i < viewGroup.getChildCount(); i++){ 
     View view = viewGroup.getChildAt(i); 
     list.add(view); 
     if(view instanceof ViewGroup){ 
      getViews((ViewGroup) view); 
     } 
    } 
} 

這裏是你怎麼稱呼它。

List<View> list = new ArrayList<View>(); 
getViews(list, (ViewGroup) this.findViewById(android.R.id.content)); 

如果你要過濾的WebView是你可以做這樣的事情:

List<WebView> webViews = new ArrayList<WebView>(); 
for(View view : list){ 
    if(view instanceof WebView){ 
     webViews.add((WebView) view); 
    } 
} 
+0

是的。 。多謝兄弟!!!!! – Moorthy