Domanda

Io stesso sto cercando di caricare le immagini (da WebService) in Gridview ed è stato fatto con successo. Ho usato un adattatore pigro per caricare tutte le immagini dal servizio web.

Se faccio clic su un'immagine, dovrebbe essere visualizzato nella prossima attività e mentre si scorre l'immagine dell'immagine dovrebbe essere visualizzata. Qualche idea???

È stato utile?

Soluzione

Questo può essere relativamente facile realizzare usando un mirino, direi. Considera il flusso come segue: quando l'utente seleziona un elemento dell'elenco, trasmettere un elenco di tutte le immagini (ad es. I loro URI) e un indice che indica quello selezionato per l'attività contenente ViewPager. È quindi possibile inizializzare l'adattatore del ViewPager con l'elenco passato e impostare l'elemento corrente su Visualizza sull'indice.

Dai un'occhiata alle demo dell'API per altri suggerimenti su come usare un mirino o leggere il post sul blog su sviluppatori.android.com. In base ai frammenti di alimentazione come visualizzazioni al mirino, è sufficiente creare un'imposta questo Q/A su così utile per alcuni suggerimenti su come farlo. Inoltre, probabilmente altrettanto importante da leggere è il documentazione su Pageradapter.

//Modificare: Alcuni suggerimenti per codificare sopra il suggerimento:

Hai il tuo onItemClick Crea un nuovo intento, aggiungi i dati pertinenti per recuperare le immagini come indice extra e selezionato e avviare l'attività:

@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    Intent intent = new Intent(this, ImageViewer.class);
    intent.putExtra(PAGE_POSITION, position);
    intent.putStringArrayListExtra(IMAGE_LIST, mImages)
    // or add a serializable, e.g. an ArrayList<T> with your POJOs
    intent.putExtra(IMAGE_LIST, mImages);
    startActivity(intent);
}

Nella tua attività ImageViewer contenente ViewPager, recupera tutti gli extra e inizializza il ViewPager nella posizione/indice data:

if (getIntent() != null && getIntent().getExtras() != null {
    mImagePosition = getIntent().getExtras().getInt(PAGE_POSITION, 0);
    mImageList = getIntent().getExtras().getStringArrayList(IMAGE_LIST);
    // or if you used Serializables
    mImageList = (ArrayList<T>) getIntent().getExtras().getSerializable(IMAGE_LIST);
    mViewPager.setAdapter(new ImagePagerAdapter());
    mViewPager.setCurrentItem(mImageIndex);
}

Nell'adeguamento di ImagePaderaDapter, istanzia le visualizzazioni di immagini contenenti le immagini che si desidera visualizzare. Ci sono tonnellate di esempi là fuori, ma sembrerà qualcosa di simile nella base:

private class ImagePagerAdapter extends PagerAdapter {

    public int getCount() {
        return mImageList == null ? 0 : mImageList.size();
    }

    public Object instantiateItem(View pager, int position) {
        if (mInflater == null) mInflater = (LayoutInflater) container.getContext().getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        View view = mInflater.inflate(R.layout.image_pager_item_layout, null, false);
        ImageView photoImageView = (ImageView) view.findViewById(R.id.photo_imageview);

        mImageLoader().loadImage(mImageList.get(position), photoImageView);

        ((ViewPager) pager).addView(view, 0);

        return view;
    }       

    public void destroyItem(View pager, int position, Object object) { 
        ((ViewPager) pager).removeView((View) object);
    }

    public boolean isViewFromObject(View view, Object object) {
        return view.equals(object);
    }

    public void finishUpdate(View container) { }
    public void restoreState(Parcelable state, ClassLoader loader) { }
    public void startUpdate(View container) { }
    public Parcelable saveState() { return null; }
}

Si noti che non ho testato il codice sopra, né è destinato a essere completo. Ad esempio, suppongo che tu sappia come ottenere un riferimento a un layoutinflater da solo e avere un caricatore di immagini "pigro" che imposta in modo asincrono un'immagine contro una vigilanza di immagini. Il image_pager_item_layout Il file può essere semplicemente unaview Image, ma anche una gerarchia di visualizzazioni più complessa all'interno di un ViewGroup (come con ListView e GridView), ad esempio, è possibile aggiungere facilmente una didascalia alle immagini. È abbastanza simile a

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top