2013-07-09 3 views
6

Я реализую приложение, которое имеет сетчатое изображение изображений в одном действии и один фрагмент для каждого изображения, которое содержит изображение в полноэкранном режиме. Когда я нажимаю на любое из изображений в сетке, он должен открыть соответствующий фрагмент. Однако мы не можем использовать намерение сделать это. вот мой кодAndroid, использующий намерение открыть фрагмент из активности

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

и фрагмент

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

Этот фрагмент связан с ImagesSwipe деятельности. SO как мне достичь перехода между элементом сетки и его соответствующим фрагментом. Спасибо

+1

Почему фрагмент для каждого изображения? – techiServices

+1

Я использую навигационную панель навигации, поэтому я сохранил каждую вкладку в качестве изображения –

+0

. Я могу придумать множество решений для этого, в зависимости от того, как приложение должно действовать на основе размеров экрана и т. Д. Загружает «GridView» в «Фрагмент» ? – techiServices

ответ

5

Вам не нужен один фрагмент для одного изображения. Просто повторно используйте один фрагмент с ImageView в его макете для каждого изображения.

Фрагменты не вызываются, как «Действия через намерение». Они могут существовать только как часть Activity, для чего они предназначены. Подумайте о них как о многоразовом пользовательском интерфейсе для деятельности. Чтобы добавить фрагмент в действие, вы должны использовать классы FragmentManager и FragmentTransaction, которые обеспечивают все взаимодействия с фрагментами.

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

Посмотрите this руководство из Документов Google, где основные вещи о GridViews описаны. В дополнение вы должны прочитать о Fragments. И вот Tutorial о вашем подходе.

1

Возможно, вы захотите проверить DialogFrament, here is an example.

Вместо того, чтобы использовать намерение использовать FramentManager:

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

И ваш dialogFrament становится:

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

Почему 'DialogFragment'? – techiServices

+0

здесь, что такое image_title? –

+0

image_title - это тег для фрагмента. Возможно, было лучше, если бы я оставил его как диалог. –