让孩子从线性布局

时间:2014-09-01 00:54:56

标签: java android android-layout get-childitem

我创建了布局文件,由一个linearlayout和两个嵌套的linearlayout组成。当我使用getParent方法时,它选择第二个嵌套的linearlayout。我的目标是第一个嵌套的linearlayout。所以我给第一个嵌套的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 */

2 个答案:

答案 0 :(得分:1)

子视图的索引为0.换句话说,第一个子视图为0,第二个子视图为1 ......依此类推。

另外,为什么不通过它的ID获取ImageView?

AnimatedGifImageView musicAnim = (AnimatedGifImageView) findViewById(R.id.music_anim);

答案 1 :(得分: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可能为null,如文档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);
}

另外,正如Sound Conception所提到的那样,您可以尝试直接使用其ID获取视图,而不是使用索引手动获取视图。