ClassCastException: AbsListView $ LayoutParams können nicht in Gallery $ LayoutParams gegossen werden

Ich versuche, eine Android 3.1 Tablet-Anwendung zu entwickeln.

Diese App wird eine Menge Bilder haben, und ich habe gefolgt Verarbeitung Bitmaps aus der UI Thread Tutorial, aber ich habe etwas falsch gemacht, weil ich:

  • Android: eine Datei aus einem vorhandenen URI speichern
  • So erstellen Sie UUID aus String in Android
  • Installationsfehler: INSTALL_FAILED_MISSING_SHARED_LIBRARY
  • Normale Tabelle vs Virtuelle Tabelle SQLite DB
  • Android Studio Langsames Debugging auf Gerät
  • Wie zu sagen, ob Android-Nutzer kam von Home-Screen-App
  • Java.lang.ClassCastException: android.widget.AbsListView $ LayoutParams können nicht in android.widget.Gallery $ LayoutParams geworfen werden

    Das ist mein Code:

    Ich setze die Galerie auf eine Aktivität ein

    mFactGallery = (Gallery)mView.findViewById(R.id.factGallery); mFactGallery.setAdapter(new ImageGalleryAdapter(mActivity, ImageView.ScaleType.FIT_END, 180, 90)); 

    ImageGalleryAdapter.java

     public class ImageGalleryAdapter extends BaseAdapter { private ArrayList<String> mImagesPath; private Context mContext; private int mWidth; private int mHeight; public ArrayList<String> getmImagesPath() { return mImagesPath; } public void setmImagesPath(ArrayList<String> mImagesPath) { this.mImagesPath = mImagesPath; } public void addImage(String imagePath) { mImagesPath.add(imagePath); } public ImageGalleryAdapter(Context context, ImageView.ScaleType scaleType, int width, int height) { mContext = context; mWidth = width; mHeight = height; mScaleType = scaleType; mImagesPath = new ArrayList<String>(); } @Override public int getCount() { return mImagesPath.size(); } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // Get a View to display image data ImageView imageView; // if it's not recycled, initialize some attributes if (convertView == null) { imageView = new ImageView(mContext); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); imageView.setLayoutParams(new GridView.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); } else { imageView = (ImageView) convertView; // Recicla el Bitmap. Bitmap bm = ((BitmapDrawable) imageView.getDrawable()).getBitmap(); if (bm != null) bm.recycle(); } String filePath = mImagesPath.get(position); if (BitmapTools.cancelPotentialWork(filePath, imageView)) { String[] params = {filePath, Integer.toString(mWidth), Integer.toString(mHeight)}; final BitmapWorkerTask task = new BitmapWorkerTask(imageView); final AsyncDrawable asyncDrawable = new AsyncDrawable(mContext.getResources(), filePath, task); imageView.setImageDrawable(asyncDrawable); task.execute(params); } return imageView; } } 

    BitmapWorkerTask.java

     public class BitmapWorkerTask extends AsyncTask<String, Void, Bitmap> { private final WeakReference<ImageView> imageViewReference; public String imgPath = ""; public BitmapWorkerTask(ImageView imageView) { // Use a WeakReference to ensure the ImageView can be garbage collected imageViewReference = new WeakReference<ImageView>(imageView); } // Decode image in background. @Override protected Bitmap doInBackground(String... params) { imgPath = params[0]; int width = Integer.valueOf(params[1]).intValue(); int height = Integer.valueOf(params[2]).intValue(); return BitmapTools.decodeSampledBitmapFromDisk(imgPath, width, height); } // Once complete, see if ImageView is still around and set bitmap. @Override protected void onPostExecute(Bitmap bitmap) { if (isCancelled()) { bitmap = null; } if (imageViewReference != null && bitmap != null) { final ImageView imageView = imageViewReference.get(); final BitmapWorkerTask bitmapWorkerTask = BitmapTools.getBitmapWorkerTask(imageView); if (this == bitmapWorkerTask && imageView != null) { imageView.setImageBitmap(bitmap); } } } } 

    AsyncDrawable.java

     public class AsyncDrawable extends BitmapDrawable { private final WeakReference<BitmapWorkerTask> bitmapWorkerTaskReference; public AsyncDrawable(Resources res, String filepath, BitmapWorkerTask bitmapWorkerTask) { super(res, filepath); bitmapWorkerTaskReference = new WeakReference<BitmapWorkerTask>(bitmapWorkerTask); } public BitmapWorkerTask getBitmapWorkerTask() { return bitmapWorkerTaskReference.get(); } } 

    Was mache ich falsch?

  • Android: Hören von Kontakt Änderungen wie WhatsApp tun
  • Sollte ich OAuth-Konsumentengeheimnis durch Android-App gespeicherte?
  • Wie gehst du (richtig) von startManagingCursor zu CursorLoader?
  • StartBluetoothSco () wirft Sicherheitsexposition (BROADCAST_STICKY) auf ICS
  • ProgressDialog in Fragment-Klasse anzeigen
  • Versprechen für Android?
  • 2 Solutions collect form web for “ClassCastException: AbsListView $ LayoutParams können nicht in Gallery $ LayoutParams gegossen werden”

    Ersetzen Sie GridView.LayoutParams mit Gallery.LayoutParams wie folgt, das wird Ihr Problem lösen

     imageView.setLayoutParams(new Gallery.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 

    In ImageGalleryAdapter.java ist das falsch:

     imageView.setLayoutParams(new GridView.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 

    Verwenden Sie die richtige LayoutParams-Klasse, sollte es sein

     imageView.setLayoutParams(new Gallery.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 

    (Die Superklasse von LayoutParams ist Gallery statt GridView )

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.