当添加另一个碎片时,Fragment Activity 变为空值

4

我使用了Android提供的兼容性库android.cupport-v4.jar,遇到了一个问题:我开始构建一个TabActivity,其中包含多个Fragment。

我有一个起始选项卡,其中包含一个GridView。当我在适配器中的项监听器中调用以下代码时:

FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
ft.add(R.id.relativeLayoutContent, newFragment);
//        ft.replace(R.id.relativeLayoutContent, newFragment);
ft.addToBackStack(null);
ft.commit();

问题是当我打开一个新的Fragment并返回到第一个Fragment时,它不会执行onAttach方法,因为它从未被解除附加,而由于新的Fragment已经被解除附加,所以activity现在持有最后一个Fragment,而不是第一个Fragment。如果我再次尝试点击一个元素,它将崩溃,并告诉我Fragment的getActivity方法为空。
有没有什么解决方法?
1个回答

0

我不确定您试图实现什么目标,但我仍然会尝试一下。

您应该使用FragmentManager来保存不同的片段,但当您在FragmentTransaction中使用add方法时,请为您的片段分配一个标签,以便您可以轻松地在不同的片段之间切换。

TabActivity也已被弃用。您考虑过在ActionBar中使用选项卡吗?http://developer.android.com/guide/topics/ui/actionbar.html#Tabs

这是我从正在进行的某个项目中提取的代码片段:

public void changeFragment(String tag){

    Fragment tmpFragment;
    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();

    //look to see if we have already added the fragment
    tmpFragment = getFragmentManager().findFragmentByTag(tag);

    //we currently have a fragment, hide it
    if (currentFragment != null){
       fragmentTransaction.detach(currentFragment);
    }

    //did not find the fragment
    if (tmpFragment == null){
      if (tag.equals("map")){
         currentFragment = CustomMapFragment.newInstance();
      } else if (tag.equals("list")){
        currentFragment = ListFragment.newInstance();
      }else {
        //TODO
    }
    //add fragment for 1st time
    fragmentTransaction.add(R.id.content_frame, currentFragment, tag); 
  } else {
    //we found the fragment
    currentFragment = tmpFragment;
    fragmentTransaction.attach(currentFragment);  //show the fragment we found
  }
  fragmentTransaction.commit();
}

您可以使用这些方法根据它们的标签在片段之间进行切换。

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