2017-10-21 5 views
1

私は、現在のアクティビティのすべてのWebView要素をロード時に取得しようとし、出力を取得します。
これは完全に機能しています。Chidレイアウトの子供たちを取得するには?

コード:

<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; 
    } 

しかしときに私1以上の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> 

がその動作していない、このように意味正しく。どうして?子ビューのカウントは返されません。一つのことを明確にする必要がある。

  • すべての子レイアウトの子を取得することは可能ですか? (例えば) ROOTレイアウトは - >のLinearLayout(いくつかの他のレイアウト) - >のLinearLayout(他のいくつかのレイアウトが)

を-Views plzは、私は、ルートレイアウトを取得し、反復処理me.Actuallyを導きます。 実行時にすべての子ビューを取得するにはどうすればよいですか?ルートレイアウトや子レイアウトやビューの数は関係ありません。私はすべてを取得する必要があります。

+0

をネストされた 'ViewGroup'でそれらの' WebView'を取得していません。 'getWenViews()'では、子が別の 'ViewGroup' - ' else if(v instanceof ViewGroup){webview.addAll(getWenViews((ViewGroup)v))の場合は 'else'が必要です。 ; } ' –

+0

レイアウト内のすべての' WebView'を取得しようとしていますか、特定の 'ViewGroup'内のすべての' WebView'を取得しようとしていますか? – Titus

+0

@MikeM。はい、私はあなたが正しいです、私は他のviewgroup.iを確認する場合はロジックを追加する必要がありますので、私は試してみてください – Moorthy

答えて

0

(可能な手段は、また、それらの両方が必要な場合/ WebViewのをのViewGroup関係ありません)すべてのビューを取得する必要があります

あなたはそのための再帰的な方法を使用することができます。ここで

は一例です:

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 Sをフィルタリングしたい場合は、このような何か行うことができます: `のViewGroup#でGetChild *()`メソッドはだけなので、直接の子 `View`sに対処

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

はい。 。ありがとう兄貴!!!!! – Moorthy

関連する問題