循环遍历 GroupView 的所有子项?

Posted

技术标签:

【中文标题】循环遍历 GroupView 的所有子项?【英文标题】:Loop through all childs of GroupView? 【发布时间】:2011-09-20 11:38:27 【问题描述】:

这是我的代码:

    Typeface font = Typeface.createFromAsset(getAssets(), "fonts/choco.ttf");  
    ViewGroup rootView = (ViewGroup) findViewById(android.R.id.content).getRootView();
    for(int i = 0; i < rootView.getChildCount(); i++)
    
        View child = rootView.getChildAt(i);
        Log.d("menfis", child.toString());
        if(child != null)
            if(child.getClass() == TextView.class)
                ((TextView) child).setTypeface(font);
    

这是我的这个页面的 XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_
android:layout_
android:background="@drawable/background_page"
android:gravity="center_horizontal" >

<ImageView
    android:id="@+id/imgApplicationIcon"         
    android:src="@drawable/logo" 
    android:layout_ android:layout_/>

<TextView  
    android:layout_marginTop="40dip"
    android:layout_ 
    android:layout_ 
    android:layout_gravity="right"
    android:textColor="@color/red"
    android:lines="2"
    android:layout_marginRight="30dip"
    android:text="test1" />

<TextView  
    android:layout_ 
    android:layout_ 
    android:layout_gravity="right"
    android:layout_marginRight="30dip"
    android:textColor="@color/red"
    android:lines="2"
    android:text="test2" />
</LinearLayout>

问题是我只能在 LogCat 控制台上得到它:

09-20 14:34:27.264: DEBUG/menfis(12251): android.widget.LinearLayout@40523820

为什么我没有得到对 TextViews 的引用?

【问题讨论】:

【参考方案1】:

你需要递归遍历视图树。目前您只列出根视图的子视图。

换句话说,你需要这样的东西:

@Override
public void onCreate(Bundle savedInstanceState) 

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    ...
    Typeface font = Typeface.createFromAsset(getAssets(), "fonts/choco.ttf");  
    ViewGroup rootView = (ViewGroup) findViewById(android.R.id.content).getRootView();
    applyFontRecursively(rootView, font);


void applyFontRecursively(ViewGroup parent, Typeface font) 
    
    for(int i = 0; i < parent.getChildCount(); i++)
    
        View child = parent.getChildAt(i);            
        if(child instanceof ViewGroup) 
        
            applyFontRecursively((ViewGroup)child, font);
        
        else if(child != null)
        
            Log.d("menfis", child.toString());
            if(child.getClass() == TextView.class)
            
                ((TextView) child).setTypeface(font);
            
                        
    

【讨论】:

以上是关于循环遍历 GroupView 的所有子项?的主要内容,如果未能解决你的问题,请参考以下文章

遍历 PHP 数组中的所有项目和子项目

html JavaScript:使用jQuery连续循环遍历子项

javascript javascript循环遍历JSON对象并返回子项

删除所有数组影片剪辑上的子项

我们可以停止一个 groupview 在触摸它时不显示它的 childList(对于某些特定情况)

MFC之TreeCtrl遍历所有节点