-4

私はAndroidアプリケーションの作業を開始しました。レイアウトを設計したのRelativeLayoutは の親です。プログラムで のGridViewを設定したいだけです。LayoutParamsGridView

以下は、私のレイアウトとコードです。

レイアウト.xml

<?xml version="1.0" encoding="utf-8"?>
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="fill_parent" >

      <RelativeLayout
          xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/relativeLayout"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content" 
          android:background="#FFFFFF">

       <GridView
           xmlns:android="http://schemas.android.com/apk/res/android"
           android:id="@+id/gridview"
           android:layout_width="fill_parent"
           android:layout_height="510dp"
           android:gravity="center"
           android:horizontalSpacing="@dimen/image_grid_hspacing"
           android:numColumns="@integer/grid_num_cols"
           android:stretchMode="columnWidth"
           android:verticalSpacing="@dimen/image_grid_vspacing"
           android:background="#FFFFFF" />   

       </RelativeLayout>
    </ScrollView>

コード :

GridView gridview = (GridView) rootView.findViewById (R.id.gridview);
gridview.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 300));

アプリケーションを起動すると、常にクラッシュし、エラー logcat が表示されます

エラー java.lang.ClassCastException: android.view.ViewGroup$LayoutParams

ばかげた質問で申し訳ありませんが、例外がスローされる理由がわかりません。例外の可能性についての質問について、あなたの見解を共有してください

4

2 に答える 2

2

すべての ViewGroup オブジェクトに存在する LayoutParams のみを配置しています。そのため、どの ViewGroup オブジェクトGridViewに属しているかを明確に述べる必要があります。

以下のようにコードを変更します。

GridView gridview = (GridView) rootView.findViewById (R.id.gridview);
gridview.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, 300));
于 2012-10-05T08:39:59.817 に答える
1

あなたのxmlレイアウトの外観から、あなたGridViewは親としてaRelativeLayoutを持っているので、使用する必要がありますRelativeLayout.LayoutParams:

gridview.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, 300));

また、子が画面に収まらない場合は、スクロールのハンドルとして aGridViewを使用しないでください。ScrollViewGridView

于 2012-10-05T08:38:40.333 に答える