Android, использующий намерение, чтобы открыть фрагмент из действия
Я реализую приложение, которое имеет gridview изображений в одном действии и один фрагмент для каждого изображения, которое содержит изображение в полноэкранном режиме. Когда я нажимаю на любое из изображений в сетке, он должен открыть соответствующий фрагмент. Однако мы не можем использовать намерение для этого. вот мой код
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);
}
}
Этот фрагмент связан с activity ImagesSwipe. Итак, как мне добиться перехода между элементом представления сетки и соответствующим ему фрагмент. Спасибо
2 ответа:
Вам не нужен один фрагмент для одного изображения. Просто используйте один фрагмент с книги в формат для каждого изображения.
Фрагменты не вызываются как действия через намерение. Они могут существовать только как часть деятельности, для чего они и предназначены. Думать о них как пользовательского интерфейса-модуль многоразового действия. Чтобы добавить фрагмент в действие, необходимо использовать классыFragmentManager иFragmentTransaction , которые обеспечивают все взаимодействия с Фрагментарный.
FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.add(YourFragment.newInstance(), null); ft.commit();
Посмотрите на это руководство из Google Docs, где описаны основные вещи о GridViews. Кроме того, вы должны прочитать о фрагментах . А вот учебник о вашем подходе.
Вы можете проверить DialogFrament, Вот пример.
Вместо использования intent вы используете FramentManager:
if(position==0) { FragmentManager fm = getFragmentManager(); ImageFrag1 imageDialog = new ImageFrag1() ImageFrag1.show(fm, "image_title"); }
И ваш диалоговый фрагмент становится:
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); } }