2013-07-09 12 views
6

Wdrażam aplikację, która ma gridview obrazów w jednym działaniu i jeden fragment dla każdego obrazu, który zawiera obraz na pełnym ekranie. Po kliknięciu dowolnego obrazu w siatce powinien on otworzyć odpowiedni fragment. Jednak nie możemy tego użyć. tutaj jest mój kodAndroid używający intencji otwarcia fragmentu z działania

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); 
      } 

i fragment jest

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); 
    } 
} 

Fragment ten jest związany z ImagesSwipe aktywności. W jaki sposób mogę uzyskać przejście między widokiem widoku siatki a odpowiadającym mu fragmentem. Dzięki

+1

dlaczego fragment dla każdego obrazu? – techiServices

+1

Używam nawigacji z przyciskami przesuwania, więc zachowałem każdą kartę jako obraz –

+0

Potrafię wymyślić wiele rozwiązań w zależności od tego, jak aplikacja powinna działać w oparciu o rozmiary ekranu itp. Ładuje 'GridView' w' Fragment' ? – techiServices

Odpowiedz

5

Nie musisz jeden fragment dla jednego obrazu. Po prostu użyj jednego fragmentu z obrazem w jego układzie dla każdego obrazu.

Fragmenty nie są wywoływane jako Działania za pomocą intencji. Mogą istnieć tylko jako część działania, do czego są przeznaczone. Pomyśl o nich jako o module wielokrotnego użytku dla działalności. Aby dodać Fragment do działania, musisz użyć klas FragmentManager i FragmentTransaction, które zapewniają wszystkie interakcje z Fragmentami.

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

Wystarczy popatrzeć na this przewodnika z Dokumentów Google, gdzie opisane są podstawowe rzeczy o GridViews. Dodatkowo powinieneś przeczytać o Fragments. A tutaj jest Tutorial o twoim podejściu.

1

Możesz wypróbować DialogFrament, here is an example.

Zamiast zamiar użyć FramentManager:

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

A twój dialogFrament staje:

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

dlaczego 'DialogFragment'? – techiServices

+0

tutaj, czym jest image_title? –

+0

image_title jest znacznikiem fragmentu. Mogło być lepiej, gdybym zostawił to jako dialog. –

Powiązane problemy