从扩展自 ListActivity 的 activity 开始一个 Fragment

start a Fragment from an activity that extends from ListActivity

我的问题是我试图从 ListActivity 延伸的 activity 开始一个片段 我尝试了这个解决方案:

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() 未知,因为我的 activity 没有从 FragmentActivity 延伸。 我不想从 FragmentActivity 扩展,有什么解决方案吗?

而不是 ListActivity 使用 ActivityFragmentActivityAppCompatActivity 其简单的解决方案

如果您仍想使用解决方案,那么创建起来很容易,但维护起来却很困难。

只需将原生 ListActivity class 复制到您的项目中,将其重命名为“FragmentListActivity”,并让它扩展 FragmentActivity 而不是 Activity。不需要其他调整,复制很容易。如果您不确定,您可以查看我的代码,但最好是获取最新的代码。

  1. 扩展 AppCompatActivity。
  2. popBackStackImmediate 后请检查片段是否已经存在于后台堆栈中,然后只创建新片段

private void replaceFragment(片段片段){

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 

像这样从 AppCompatActivity 扩展你的 activity: BaseActivity extends AppCompatActivity

通过这种方式,您可以为您的应用程序添加对旧设备的支持,而且该片段应该 android.support.v4.app.Fragment; 并且一切正常。

也在你的 app.gradle 添加这个,这样你就可以使用 AppCompat 库:

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

根据之前的回答:

看来你应该找到另一种方式来在 ListActivity 中显示你的片段,例如用自定义样式或类似的东西显示 DialogFragment...

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