2014-09-01 38 views
0

我创建了布局文件,它由一个线性布局和两个嵌套线性布局组成。当我使用getParent方法时,它选择第二个嵌套的线性布局。我的目标是第一个嵌套的线性布局。所以我给第一个嵌套的linearlayout一个名为linear_top的ID。然后我在onCreateView中声明,测试和调试,我没有运气它显示为null。从线性布局获取子代

我的目标是AnimatedGifImageView

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<LinearLayout 
    android:id="@+id/linear_top" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

    <TextView 
    android:id="@+id/music_title" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Love Story" 
    android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <com.music.flow.lib.AnimatedGifImageView 
     android:id="@+id/music_anim" 
     android:layout_width="match_parent" 
     android:layout_height="76dp" 
     android:scaleType="fitXY" 
     android:contentDescription="Animation" 
     /> 

</LinearLayout> 

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 

    <RatingBar 
     android:id="@+id/music_rating"    
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:minHeight="40dp" 
     android:numStars="4" 
     android:rating="3.5" /> 

    <ImageView 
     android:id="@+id/btn_playmusic" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="50dp" 
     android:src="@drawable/resume" /> 
</LinearLayout> 

OnCreateView

linearTop = (LinearLayout) v.findViewById(R.id.linear_top);     
AnimatedGifImageView animatedGifImageView = 
        (AnimatedGifImageView) linearTop.getChildAt(1); /* Null Exception */ 
+0

你在哪里声明了OnCreateView方法?通常,findViewById从实体的生命周期方法中被调用。然后,不需要使用父容器来访问此方法。 – 2014-09-01 01:11:01

回答

1

子视图是从0索引换言之,第一子视图是0,则第二个子视图是1 ...等等。

此外,为什么你不只是通过它的ID获取ImageView?

AnimatedGifImageView musicAnim = (AnimatedGifImageView) findViewById(R.id.music_anim); 
0
@Override 
    public View onCreateView(View v, String name, Context context, 
      AttributeSet attrs) { 
     LinearLayout linearTop = (LinearLayout) v.findViewById(R.id.linear_top); 
     ImageView animatedGifImageView = (ImageView) linearTop.getChildAt(1); // NullPointer 

     return super.onCreateView(v, name, context, attrs); 
    } 

请问您的代码看起来象?您收到NullPointerException,因为在onCreateView中,参数View v可能为空,如文档here中所述。你在使用碎片吗?如果不是,则不要使用onCreateView。将您的代码,而不是onCreate这样的:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    LinearLayout linearTop = (LinearLayout) findViewById(R.id.linear_top); 
    ImageView animatedGifImageView = (ImageView) linearTop.getChildAt(1); 

    setContentView(R.layout.activity_nested_linearlayout); 
} 

,也就像什么声音构想中提到,你可以只尝试直接通过使用ID,而不是手动得到它使用索引获取视图。