繁体   English   中英

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

[英]Fragment Activity goes null when another fragment is added

我正在使用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。

对此有任何解决方法吗?

我不确定你要完成什么,但无论如何我都要去刺它。

您应该使用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();
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM