2017-10-21 29 views
1

J'essaie d'obtenir tous les éléments WebView dans l'activité en cours au moment du chargement et de la sortie.
Cela fonctionne parfaitement.Comment obtenir les enfants de Chid Layout?

code:

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

mais quand je un plus LinearLayout (Non seulement LinearLayout autres dispositions aussi) pour parent WebView signifie comme celui-ci,

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

Son ne fonctionne pas correctement. Pourquoi? Il ne retournera aucun compte de vue enfant. Je dois clarifier une chose.

  • est-il possible d'obtenir tous les enfants de la disposition de l'enfant. (par exemple) ROOT AGENCEMENT -> LinearLayout (une autre mise en page) -> LinearLayout (une autre mise en page) -Vue

plz guider me.Actually i obtenir la mise en page des racines et itérer sur. Comment obtenir toutes les vues enfant lors de l'exécution? Peu importe le nombre de mises en page racines ou de mises en page ou de vues enfant. J'ai besoin de tout.

+0

Le 'ViewGroup # getChild *()' méthodes traitent uniquement avec enfant direct 'View's, donc vous n'obtenez pas ces 'WebView's dans' ViewGroup' imbriqué. Dans 'getWenViews()', ce 'if' a besoin d'un' else if' dans le cas où l'enfant est un autre 'ViewGroup' -' else if (v instanceof ViewGroup) {webview.addAll (getWenViews ((ViewGroup) v)) ; } ' –

+0

Essayez-vous d'obtenir tous les' WebView's dans la mise en page ou tous les 'WebView's à l'intérieur d'un' ViewGroup' spécifique? – Titus

+0

@MikeM. oui mike vous avez raison, il obtiendra l'affichage direct de l'enfant seulement, selon la logique, je dois ajouter d'autre si pour vérifier l'autre viewgroup.i vais essayer de vous mettre à jour – Moorthy

Répondre

0

besoin d'obtenir toutes les vues (n'a pas d'importance viewgroup/WebView si les moyens ont besoin des deux aussi)

Vous pouvez utiliser une méthode récursive pour cela.

Voici un exemple:

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

Et voici comment vous l'appelez.

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

Et si vous voulez filtrer les WebView s que vous pouvez faire quelque chose comme ceci:

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

Oui. . Merci mec!!!!! – Moorthy