从扩展自 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
使用 Activity
或 FragmentActivity
或 AppCompatActivity
其简单的解决方案
如果您仍想使用解决方案,那么创建起来很容易,但维护起来却很困难。
只需将原生 ListActivity
class 复制到您的项目中,将其重命名为“FragmentListActivity
”,并让它扩展 FragmentActivity
而不是 Activity。不需要其他调整,复制很容易。如果您不确定,您可以查看我的代码,但最好是获取最新的代码。
- 扩展 AppCompatActivity。
- 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 将只有一个简单的片段占位符 - 这应该不需要太多改变,但在未来它会更容易重新格式化您的代码。
我的问题是我试图从 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
使用 Activity
或 FragmentActivity
或 AppCompatActivity
其简单的解决方案
如果您仍想使用解决方案,那么创建起来很容易,但维护起来却很困难。
只需将原生 ListActivity
class 复制到您的项目中,将其重命名为“FragmentListActivity
”,并让它扩展 FragmentActivity
而不是 Activity。不需要其他调整,复制很容易。如果您不确定,您可以查看我的代码,但最好是获取最新的代码。
- 扩展 AppCompatActivity。
- 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 将只有一个简单的片段占位符 - 这应该不需要太多改变,但在未来它会更容易重新格式化您的代码。