Autore Topic: Problema con ImageView  (Letto 684 volte)

Offline dom4

  • Utente normale
  • ***
  • Post: 158
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos, Nexus 5
Problema con ImageView
« il: 09 Settembre 2011, 17:05:38 CEST »
0
Buonasera,spero possiate ancora aiutarmi come avete sempre fatto.Ho un immagine che scarico mediante Url,l'url è contenuto in un Object che ho chiamato Deal.Per visualizzare l'immagine ho seguito un tutorial sul lazy load,in quanto questi Deal devono popolare una listView.
Questo è DealAdapter con la gestione dello scaricamento e caricamento immagine
Codice (Java): [Seleziona]
        private int resource;
    private LayoutInflater  inflater;
    ListView listView = null;
    ImageView image;
    String TAG = "DealCategoryAdapter";
    private ImageThreadLoader imageLoader = new ImageThreadLoader();

    public      DealAdapter ( Context context, int resourceId, ArrayList<Deal> p ) {
            super( context, resourceId, p );
            resource = resourceId;
            inflater = LayoutInflater.from( context );
    }

   
    @Override
        public View getView ( int position, View convertView, ViewGroup parent ) {

            // Recuperiamo l'oggetti che dobbiamo inserire a questa posizione
            Deal deal = (Deal) getItem( position );

            DealViewCache viewCache;

            if ( convertView == null ) {
                    convertView = ( RelativeLayout ) inflater.inflate( resource, null );
                    viewCache = new DealViewCache( convertView );
                    convertView.setTag( viewCache );
            }
            else {
                    convertView = ( RelativeLayout ) convertView;
                    viewCache = ( DealViewCache ) convertView.getTag();
            }
           
           
            Bitmap cachedImage = null;
                try {
                  image = viewCache.getImageView();    
                  cachedImage = imageLoader.loadImage(deal.getImage(), new ImageLoadedListener() {
                  public void imageLoaded(Bitmap imageBitmap) {
                  image.setImageBitmap(imageBitmap);
                  notifyDataSetChanged();                
            }
                  });
                } catch (MalformedURLException e) {
                  Log.e(TAG, "Bad remote image URL: " + deal.getImage(), e);
                }
                if( cachedImage != null ) {
                  image.setImageBitmap(cachedImage);
                  Log.i(TAG, "immagine settata");
                }
                else if(cachedImage == null)
                {
                        Log.i(TAG, "cachedImage è null");
                        image.setImageResource(R.drawable.icon);
                }
           
           
                         
     
         
         
            TextView tvTitolo = viewCache.getTitoloView();
            tvTitolo.setText( deal.getTitolo() );

            TextView tvDescrizioneB = viewCache.getDescrizioneBView();
            String s = deal.getDescrizioneBreve();
            int lun = s.length();
            String n = "";
            if(lun > 25)
            {
                for(int i = 0;i<25;i++)
                {
                n += s.charAt(i);
                }
               
                tvDescrizioneB.setText(n);
            }
           
            else tvDescrizioneB.setText( deal.getDescrizioneBreve() );
           
            if(tvDescrizioneB.getText().equals("anyType{}"))
            {
                tvDescrizioneB.setText("Nessuna descrizione");
            }
            return convertView;

    }
}
Le immagini nella listView vengono visualizzate correttamente,il mio problema è che cliccando su di una riga devo visualizzare una nuova activity con l'immagine ingrandita.Cosa mi consigliate di fare?Come prima prova ho passato l'oggetto Deal da un activity all'altra,ma naturalmente per quanto riguarda l'immagine viene passato il link e non l'immagine.Dovrei riscaricarla secondo voi?
Oppure ho provato a memorizzare la bitmap in questo modo:
Codice (Java): [Seleziona]
   
Bitmap cachedImage = null;
                try {
                  image = viewCache.getImageView();    
                  cachedImage = imageLoader.loadImage(deal.getImage(), new ImageLoadedListener() {
                  public void imageLoaded(Bitmap imageBitmap) {
                  image.setImageBitmap(imageBitmap);
                  notifyDataSetChanged();                
            }
                  });
                } catch (MalformedURLException e) {
                  Log.e(TAG, "Bad remote image URL: " + deal.getImage(), e);
                }
                if( cachedImage != null ) {
                  image.setImageBitmap(cachedImage);
                  Log.i(TAG, "immagine settata");
                }
                else if(cachedImage == null)
                {
                        Log.i(TAG, "cachedImage è null");
                        image.setImageResource(R.drawable.icon);
                }

deal.setimageScaricata(cachedImage);
e quindo poi provo a caricarla nell'altra activity in questo modo:
Codice (Java): [Seleziona]
                      Bundle b1 = this.getIntent().getExtras();
                      Deal selezionato =(Deal) b1.getSerializable("selezionato");
                      ImageView immagine = (ImageView)findViewById(R.id.dealImage);
                      immagine.setImageBitmap(selezionato.getimageScaricata());
                 
Ma quando clicco sulla riga l'applicazione crasha e mi ritorna questo errore:
Codice: [Seleziona]
09-09 14:45:07.588: ERROR/AndroidRuntime(350): Caused by: android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called  CREATOR on class deal.Deal
Mi chiede di creare un Parcelable.Creator.
E' questa la via da seguire?Oppure mi conviene memorizzare l'immagine della riga selezionata sulla SD e caricarla nell'activity?
Scusatemi per questo post lunghissimo,ma volevo essere sicuro di spiegarmi bene e cercare il metodo migliore.