Autore Topic: Eccezione con GridView con inflate  (Letto 594 volte)

Offline osa100

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
Eccezione con GridView con inflate
« il: 05 Novembre 2011, 14:54:17 CET »
0
Salve,
voglio creare una galleria con una GridView. Come elemento della gridview ho usato un menu inflate (grid_folder_item.xml).
Quando avvio l'applicaizone si presenta la seguente eccezione:
Codice: [Seleziona]
11-05 14:06:01.520: E/AndroidRuntime(337): FATAL EXCEPTION: main
11-05 14:06:01.520: E/AndroidRuntime(337): java.lang.ClassCastException: android.widget.AbsListView$LayoutParams
11-05 14:06:01.520: E/AndroidRuntime(337):         at android.widget.LinearLayout.measureVertical(LinearLayout.java:355)
11-05 14:06:01.520: E/AndroidRuntime(337):         at android.widget.LinearLayout.onMeasure(LinearLayout.java:304)
11-05 14:06:01.520: E/AndroidRuntime(337):         at android.view.View.measure(View.java:8171)
11-05 14:06:01.520: E/AndroidRuntime(337):         at android.widget.GridView.onMeasure(GridView.java:947)
11-05 14:06:01.520: E/AndroidRuntime(337):         at android.view.View.measure(View.java:8171)
11-05 14:06:01.520: E/AndroidRuntime(337):         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
11-05 14:06:01.520: E/AndroidRuntime(337):         at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
11-05 14:06:01.520: E/AndroidRuntime(337):         at android.view.View.measure(View.java:8171)
11-05 14:06:01.520: E/AndroidRuntime(337):         at android.widget.LinearLayout.measureVertical(LinearLayout.java:526)
11-05 14:06:01.520: E/AndroidRuntime(337):         at android.widget.LinearLayout.onMeasure(LinearLayout.java:304)
11-05 14:06:01.520: E/AndroidRuntime(337):         at android.view.View.measure(View.java:8171)
11-05 14:06:01.520: E/AndroidRuntime(337):         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
11-05 14:06:01.520: E/AndroidRuntime(337):         at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
11-05 14:06:01.520: E/AndroidRuntime(337):         at android.view.View.measure(View.java:8171)
11-05 14:06:01.520: E/AndroidRuntime(337):         at android.view.ViewRoot.performTraversals(ViewRoot.java:801)
11-05 14:06:01.520: E/AndroidRuntime(337):         at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
11-05 14:06:01.520: E/AndroidRuntime(337):         at android.os.Handler.dispatchMessage(Handler.java:99)
11-05 14:06:01.520: E/AndroidRuntime(337):         at android.os.Looper.loop(Looper.java:123)
11-05 14:06:01.520: E/AndroidRuntime(337):         at android.app.ActivityThread.main(ActivityThread.java:4627)
11-05 14:06:01.520: E/AndroidRuntime(337):         at java.lang.reflect.Method.invokeNative(Native Method)
11-05 14:06:01.520: E/AndroidRuntime(337):         at java.lang.reflect.Method.invoke(Method.java:521)
11-05 14:06:01.520: E/AndroidRuntime(337):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-05 14:06:01.520: E/AndroidRuntime(337):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-05 14:06:01.520: E/AndroidRuntime(337):         at dalvik.system.NativeStart.main(Native Method)

Questo è il menu inflate grid_folder_item.xml:
Codice: [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
   
   <ImageView android:id="@+id/grid_folder_image" android:layout_width="wrap_content"
      android:layout_height="wrap_content"/>
   <TextView android:id="@+id/grid_folder_name"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="TextView"
      android:gravity="center_horizontal"
      android:textColor="#000000">
   </TextView>
</LinearLayout>
Questa è la GridView:
Codice: [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/photo_grid"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
    android:padding="5dp"
    android:verticalSpacing="5dp"
    android:horizontalSpacing="20dp"
    android:numColumns="auto_fit"
    android:columnWidth="60dp"
    android:stretchMode="columnWidth"
    android:gravity="center_horizontal"
    android:background="#ffffff">
</GridView>

In ultimo ecco la classe GridAdapter:

Codice: [Seleziona]
package it.bwpp.adapter;

import it.bwpp.activity.R;
import it.bwpp.filemgr.PictureFolder;

import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;

public class ImageGridAdapter extends BaseAdapter {
          private Context mContext;
          private List<PictureFolder> picturesFolders;

          public ImageGridAdapter(Context c, List<PictureFolder> folders) {
                mContext = c;
                this.picturesFolders = folders;
            }

          public int getCount() {
                  return picturesFolders.size();
           }

            public Object getItem(int position) {
                return picturesFolders.get(position);
            }

            public long getItemId(int position) {
                    return picturesFolders.get(position).getPath().hashCode();
            }

            // create a new ImageView for each item referenced by the Adapter
            public View getView(int position, View convertView, ViewGroup parent) {
                    View itemView = convertView;
                    if (convertView == null){
                        //LayoutInflater li = ((Activity)mContext).getLayoutInflater();
                            LayoutInflater li = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                        itemView = li.inflate(R.layout.grid_folder_item, null);
                       
                        ImageView imageView = (ImageView)itemView.findViewById(R.id.grid_folder_image);
                    imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
                    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
                    imageView.setPadding(8, 8, 8, 8);
                        imageView.setImageBitmap(picturesFolders.get(position).getPreviewImage());
                       
                        TextView tv = (TextView) itemView.findViewById(R.id.grid_folder_name);
                        tv.setText(picturesFolders.get(position).getName());
                    } else {
                            itemView = convertView;
                    }
                return itemView;
            }


}

Sapete aiutarmi

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Eccezione con GridView con inflate
« Risposta #1 il: 05 Novembre 2011, 15:05:08 CET »
+1
Ciao! Credo l'errore sia in questa riga:
Codice (Java): [Seleziona]
    imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
L'imageview è all'interno di un LinearLayout, quindi dovresti passargli questo:
Codice (Java): [Seleziona]
    imageView.setLayoutParams(new LinearLayout.LayoutParams(85, 85));


Offline osa100

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
Re:Eccezione con GridView con inflate
« Risposta #2 il: 05 Novembre 2011, 15:27:41 CET »
0
Grazie mille! Ho tolto questa riga di codice, ho messo le dimensioni dell'immagine nel file xml
« Ultima modifica: 05 Novembre 2011, 15:30:16 CET da osa100 »