1

だから私はGridViewを使用するアプリを持っています。アプリは最小 API 8 で動作するようにターゲット設定されているため、サポート ライブラリを使用しています。したがって、次の XML を記述します。

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

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:src="@drawable/logotipo_high_density_vinceri_movil" />

<ImageView
    android:id="@+id/imageView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_toRightOf="@+id/imageView1"
    android:src="@drawable/home_high_density_vinceri_movil" />

<ImageView
    android:id="@+id/imageView3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:src="@drawable/alertas_high_density_vinceri_movil" />

<ImageView
    android:id="@+id/imagelogo"
    android:layout_width="69dp"
    android:layout_height="69dp"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/imageView1" />

<TextView
    android:id="@+id/detallenombrecamp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/imagelogo"
    android:layout_alignParentRight="true"
    android:layout_alignTop="@+id/imagelogo"
    android:layout_toRightOf="@+id/imagelogo"
    android:text="Large Text"
    android:textAppearance="?android:attr/textAppearanceLarge" />

<TextView
    android:id="@+id/textocamp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_below="@+id/imagelogo"
    android:text="Medium Text"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<ImageView
    android:id="@+id/iconostaff"
    android:layout_width="78dp"
    android:layout_height="72dp"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/textocamp"
    android:src="@drawable/icono_staff_high_density_vinceri_movil" />

<ImageView
    android:id="@+id/iconofotos"
    android:layout_width="78dp"
    android:layout_height="72dp"
    android:layout_alignTop="@+id/iconostaff"
    android:layout_toLeftOf="@+id/imageView2"
    android:src="@drawable/icono_fotos_high_density_vinceri_movil" />

<ImageView
    android:id="@+id/iconovideo"
    android:layout_width="78dp"
    android:layout_height="72dp"
    android:layout_alignTop="@+id/iconofotos"
    android:layout_toLeftOf="@+id/imageView3"
    android:src="@drawable/icono_video_high_density_vinceri_movil" />

<ImageView
    android:id="@+id/iconostats"
    android:layout_width="78dp"
    android:layout_height="72dp"
    android:layout_alignParentRight="true"
    android:layout_alignTop="@+id/iconovideo"
    android:src="@drawable/icono_estadistica_high_density_vinceri_movil" />

<android.support.v7.widget.GridLayout
    android:id="@+id/grid"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_below="@+id/iconostaff" >

</android.support.v7.widget.GridLayout>

</RelativeLayout>

このアクティビティ: import android.app.Activity; android.os.Bundle をインポートします。android.widget.GridView をインポートします。

public class DetalleCampActivity extends Activity {

private Integer[] imagenes={
        R.drawable.logo_carrefour,
        R.drawable.logo_mercedes,
        R.drawable.logo_venta_unica
};


@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.detallecamplayout);     
    GridView grid=(GridView)findViewById(R.id.grid);//This is line 26
    grid.setAdapter(new ImageAdapter(this));

}

}

そして、私はこのアダプターを使用します:

public class ImageAdapter extends BaseAdapter {

private Context context;
int mGalleryItemBackground;
private Integer[] imagenes={
        R.drawable.logo_carrefour,
        R.drawable.logo_mercedes,
        R.drawable.logo_venta_unica
};

public ImageAdapter(Context c) {
    context=c;
    TypedArray attr=context.obtainStyledAttributes(R.styleable.Gallery);
    mGalleryItemBackground=attr.getResourceId(R.styleable.Gallery_android_galleryItemBackground, 0);
    attr.recycle();
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return imagenes.length;
}

@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
}

@SuppressWarnings("deprecation")
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ImageView image;
    if(convertView==null){
    image=new ImageView(context);

    image.setImageResource(imagenes[position]);
    image.setLayoutParams(new GridView.LayoutParams(150, 150));
    image.setScaleType(ImageView.ScaleType.CENTER_CROP);
    image.setPadding(8, 8, 8, 8);
    }else{
        image=(ImageView) convertView;
    }
    image.setBackgroundResource(imagenes[position]);
    return image;
}

}

コンパイル時にエラーは表示されませんが、アプリを実行すると、次のスタック トレースが表示されます。

03-20 15:31:21.498: E/AndroidRuntime(20630): FATAL EXCEPTION: main
03-20 15:31:21.498: E/AndroidRuntime(20630): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.publidirecta.vincerientidad2/com.publidirecta.vincerientidad2.DetalleCampActivity}: java.lang.ClassCastException: android.support.v7.widget.GridLayout
03-20 15:31:21.498: E/AndroidRuntime(20630):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1659)
03-20 15:31:21.498: E/AndroidRuntime(20630):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1675)
03-20 15:31:21.498: E/AndroidRuntime(20630):    at android.app.ActivityThread.access$1500(ActivityThread.java:121)
03-20 15:31:21.498: E/AndroidRuntime(20630):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943)
03-20 15:31:21.498: E/AndroidRuntime(20630):    at android.os.Handler.dispatchMessage(Handler.java:99)
03-20 15:31:21.498: E/AndroidRuntime(20630):    at android.os.Looper.loop(Looper.java:130)
03-20 15:31:21.498: E/AndroidRuntime(20630):    at android.app.ActivityThread.main(ActivityThread.java:3701)
03-20 15:31:21.498: E/AndroidRuntime(20630):    at java.lang.reflect.Method.invokeNative(Native Method)
03-20 15:31:21.498: E/AndroidRuntime(20630):    at java.lang.reflect.Method.invoke(Method.java:507)
03-20 15:31:21.498: E/AndroidRuntime(20630):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
03-20 15:31:21.498: E/AndroidRuntime(20630):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
03-20 15:31:21.498: E/AndroidRuntime(20630):    at dalvik.system.NativeStart.main(Native Method)
03-20 15:31:21.498: E/AndroidRuntime(20630): Caused by: java.lang.ClassCastException: android.support.v7.widget.GridLayout
03-20 15:31:21.498: E/AndroidRuntime(20630):    at com.publidirecta.vincerientidad2.DetalleCampActivity.onCreate(DetalleCampActivity.java:26)
03-20 15:31:21.498: E/AndroidRuntime(20630):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-20 15:31:21.498: E/AndroidRuntime(20630):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1623)

サポート ライブラリを使用して ClassDefNotFoundError を取得しないように多くの時間を無駄にした後 (そして、なぜ今それをスローしないのかよくわかりません)、私は今これを持っています。それを修正する方法はありますか?どうもありがとうございました!

4

3 に答える 3

4

を にキャストしようとしGridLayoutていGridViewます。が必要なのは明らかなのでGridView、XML ファイルで次のように変更します。

<android.support.v7.widget.GridLayout
    android:id="@+id/grid"

に:

<GridView
    android:id="@+id/grid"

または、本当に が必要な場合はGridLayout、アクティビティの次の行を変更します。

GridView grid=(GridView)findViewById(R.id.grid);

に:

android.support.v7.widget.GridLayout grid = (android.support.v7.widget.GridLayout)findViewById(R.id.grid);

GridLayoutただし、 はアダプタを使用しないため、アダプタでエラーが発生します。

于 2013-03-20T15:59:11.550 に答える
0

In case it helps somebody with my problem, setting the GridView this way in the layout:

<GridView
    android:id="@+id/grid"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:columnWidth="90dp"
    android:numColumns="auto_fit"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:stretchMode="columnWidth"
    android:gravity="center"/>

will make it look like a grid.

于 2013-03-20T16:25:17.620 に答える