2013-07-09 16 views
6

Sto implementando un'applicazione che presenta una griglia di immagini in una sola attività e un frammento per ogni immagine che contiene l'immagine a schermo intero. Quando clicco su una qualsiasi delle immagini nella griglia, dovrebbe aprire il frammento corrispondente. Tuttavia, non possiamo usare l'intento per farlo. Ecco il mio codiceAndroid che utilizza l'intento per aprire un frammento da un'attività

public void onItemClick(AdapterView<?> arg0, View arg1, int position, 
       long arg3) { 
      // TODO Auto-generated method stub 
      if(position==0) 
      { 
       Intent i=new Intent(Gallery.this,ImageFrag1.class); 
       startActivity(i); 
      } 

e il frammento è

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class ImageFrag1 extends Fragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     return inflater.inflate(R.layout.imagefrag1, container, false); 
    } 
} 

Questo frammento è associata a un ImagesSwipe attività. SO come ottengo la transizione tra l'elemento della vista griglia e il suo frammento corrispondente. Grazie

+1

perché un frammento per ogni immagine? – techiServices

+1

Sto usando una navigazione con schede a scorrimento, quindi ho mantenuto ogni scheda come immagine –

+0

Posso pensare a molte soluzioni a questo a seconda di come l'app deve agire in base alle dimensioni dello schermo ecc. Il 'GridView' si carica in un' Frammento' ? – techiServices

risposta

5

Non hai bisogno di un frammento di un'immagine. Riutilizza un frammento con una ImageView nel layout di ogni immagine.

I frammenti non vengono richiamati come Attività attraverso un Intento. Possono esistere solo come parte di un'attività, questo è ciò per cui sono progettati. Pensateli come un UI-Modul riutilizzabile per un'attività. Per aggiungere un frammento a un'attività, è necessario utilizzare le classi FragmentManager e FragmentTransaction, che forniscono tutte le interazioni con Fragments.

FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.add(YourFragment.newInstance(), null); 
    ft.commit(); 

Dai un'occhiata alla this guida dal Google Documenti in cui sono descritte le cose di base su GridView. Inoltre, si dovrebbe leggere su Fragments. Ed ecco un Tutorial sul tuo approccio.

1

Si consiglia di controllare DialogFrament, here is an example.

Invece di utilizzare intenti si utilizza FramentManager:

if(position==0) 
{ 
FragmentManager fm = getFragmentManager(); 
ImageFrag1 imageDialog = new ImageFrag1() 
ImageFrag1.show(fm, "image_title"); 
} 

E il vostro dialogFrament diventa:

import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class ImageFrag1 extends DialogFragment { 

public ImageFrag1() { 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.dialog_fragment, container, false); 
    } 
} 
+0

perché un 'DialogFragment'? – techiServices

+0

qui, cos'è image_title? –

+0

image_title è il tag per il frammento. Potrebbe essere stato meglio se l'avessi lasciato come finestra di dialogo. –

Problemi correlati