0

レイアウト ファイルを作成しました。これは、1 つの linearlayout と、メイン レイアウト内の 2 つの入れ子になった linearlayout で構成されます。getParent メソッドを使用すると、2 番目にネストされた 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 */
4

2 に答える 2

1

子ビューは 0 からインデックス付けされます。つまり、最初の子ビューは 0、2 番目の子ビューは 1... のようになります。

また、ID で ImageView を取得してみませんか?

AnimatedGifImageView musicAnim = (AnimatedGifImageView) findViewById(R.id.music_anim);
于 2014-09-01T00:58:47.777 に答える
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);
    }

コードは次のようになっていますか? ドキュメントhereに記載されているように、onCreateView ではパラメータView vが null である可能性があるため、NullPointerException が発生しています。フラグメントを使用していますか?そうでない場合は、使用しないでください。代わりに次のようにコードを配置します。onCreateViewonCreate

@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 を使用してビューを直接取得することもできます。

于 2014-09-01T06:43:24.837 に答える