从ListActivity扩展的活动中启动片段

时间:2015-08-11 10:40:45

标签: android android-fragments android-fragmentactivity fragmentmanager

我的问题是我试图从ListActivity扩展的活动开始一个片段我尝试了这个解决方案:

FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

        fragmentManager.beginTransaction()
                .replace(R.id.frame_container, fragment, TAG).commit();

        fragmentManager.beginTransaction()
                .replace(R.id.frame_container, fragment, TAG)
                .addToBackStack(TAG)
                .commit();

问题是:getSupportFragmentManager()未知,因为我的活动并未从FragmentActivity延伸。 我不想从FragmentActivity延伸,有没有解决办法呢?

4 个答案:

答案 0 :(得分:1)

代替ListActivity使用ActivityFragmentActivityAppCompatActivity轻松解决方案

如果您仍然想要使用而不是解决方案很容易创建但很难维护。

只需将原生ListActivity课程复制到您的项目中,重命名为" FragmentListActivity",然后让它扩展FragmentActivity而不是活动。不需要其他调整,副本很容易。如果你不确定你可以在我的代码中达到高峰,但总是最好推出最新代码。

答案 1 :(得分:1)

  1. 扩展了AppCompatActivity。
  2. 在popBackStackImmediate之后,请检查片段是否已经存在于后台堆栈中,然后才创建新片段
  3. private void replaceFragment(Fragment fragment){

    String backStateName = fragment.getClass().getName();.
    
    FragmentManager manager = getFragmentManager();
    
    boolean fragmentPopped = manager.popBackStackImmediate(backStateName, 0);
    
    if (!fragmentPopped) { //fragment not in back stack, create it.
    
        FragmentTransaction ft = manager.beginTransaction();
    
        ft.replace(R.id.fragment_place, fragment);
    
        ft.addToBackStack(backStateName);
    
        ft.commit();
    
    }
    

    }

        compile 'com.android.support:appcompat-v7:22.0.0' // add this dependency 
    

答案 2 :(得分:0)

将此活动从AppCompatActivity扩展为: BaseActivity extends AppCompatActivity

通过这种方式,您可以向旧版设备添加对您的应用的支持,此外片段应为android.support.v4.app.Fragment;,一切正常。

同样在app.gradle中添加此项,以便您可以使用AppCompat库:

compile 'com.android.support:appcompat-v7:22.2.1'

答案 3 :(得分:0)

根据以前的答案:

您似乎应该找到另一种在ListActivity中显示片段的方法,例如使用自定义样式或类似内容显示DialogFragment ...

恕我直言,最好的解决方案是将ListActivity的所有逻辑放到ListFragment中 - 您的活动将只有一个片段的简单占位符 - 这不需要太多更改,但将来重新格式化代码会更容易。