我的问题是我试图从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
延伸,有没有解决办法呢?
答案 0 :(得分:1)
代替ListActivity
使用Activity
或FragmentActivity
或AppCompatActivity
轻松解决方案
如果您仍然想要使用而不是解决方案很容易创建但很难维护。
只需将原生ListActivity
课程复制到您的项目中,重命名为" FragmentListActivity
",然后让它扩展FragmentActivity
而不是活动。不需要其他调整,副本很容易。如果你不确定你可以在我的代码中达到高峰,但总是最好推出最新代码。
答案 1 :(得分:1)
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中 - 您的活动将只有一个片段的简单占位符 - 这不需要太多更改,但将来重新格式化代码会更容易。