Android使用意图从活动打开片段

6

我正在实现一个应用程序,其中一个活动中有一组图片的网格视图,并且每个图像都对应一个包含全屏图像的片段。当我点击网格中的任何图像时,它应该打开相应的片段。但是,我们不能使用意图来实现这一点。 下面是我的代码。

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的活动中。那么我该如何实现网格视图项和其对应片段之间的过渡呢?谢谢。


1
为什么每个图像都需要一个片段? - techi.services
1
我正在使用滑动选项卡导航,所以我将每个选项卡保留为图像。 - Shivam Bhalla
我可以想到很多解决方案,具体取决于应用程序如何根据屏幕大小等行为。GridViewFragment中加载吗? - techi.services
Android使用Intent从Activity打开Fragment,但我们不能使用Intent来实现这一点。这是我的代码。您想要实现什么? - Joel Bodega
我正在尝试为每个GridView项单击打开一个新的Fragment。然而,这里不能使用意图(intents)。那么我该怎么做呢? - Shivam Bhalla
2个回答

6
你不需要为每个图像创建一个 Fragment。只需重复使用一个包含 ImageView 的 Fragment 布局来显示所有图像即可。
Fragment 不像 Activity 一样通过 Intent 被调用。它们只能作为 Activity 的一部分存在,这也是它们的设计初衷。把它们看作为 Activity 的可重用 UI 模块。如果要将 Fragment 添加到 Activity 中,您需要使用 FragmentManagerFragmentTransaction 类,这些类提供了与 Fragment 的所有交互。
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.add(YourFragment.newInstance(), null);
    ft.commit();

请查看来自Google Docs的this指南,其中描述了有关GridView的基本事项。此外,您还应该阅读Fragments相关内容。这里有一个Tutorial介绍您的方法。

1
您可能想要查看DialogFragment,这里有一个示例
与使用intent不同,您需要使用FragmentManager:
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);
  }
}

这里,image_title是什么? - Shivam Bhalla
image_title是片段的标签。如果我将其保留为dialog可能会更好。 - A-Rod
我在这行代码 ImageDial1.show(fm,"image_title"); 中遇到了一个错误:“无法对非静态方法show()进行静态引用”。 - Shivam Bhalla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接