添加另一个片段时,片段活动为空

时间:2012-03-20 15:05:48

标签: android android-fragments fragment

我正在使用android给出的兼容性库android.cupport-v4.jar,我发现了一个问题,我开始构建一个TabActivity,其中包含几个片段。

我有一个带有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();

问题是当我打开新片段并返回第一个片段时,它不会用于onAttach,因为它从未被取消,并且因为新片段是,所以活动现在持有最后一个,但不是第一个,如果我再次尝试点击一个元素,它会崩溃告诉我,Fragment中的getActivity方法是null。

有关此问题的任何解决方法吗?

1 个答案:

答案 0 :(得分:0)

我不确定你想要完成什么,但无论如何我都会采取措施。

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

TabActivity也已被弃用。 你有没有想过在ActionBar中使用Tabs? 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();
}

您可以使用此方法根据标记切换片段。