Android 如何根据列表是否为空在主活动中显示片段?
我正在为即将到来的生日开发一款Android应用程序。我有一种方法,可以检查SQLite数据库中的日期,看两天后是否有即将到来的生日,然后加载到列表中。还有两个片段:main片段和BirthdayFragment。在启动应用程序时,我希望仅当列表包含某些内容时显示BirthdayFragment,如果没有,则应显示MainFragment。但当我使用下面的代码启动应用程序时,它显示了一个空的活动。当列表为空和不为空时,我尝试了这个方法Android 如何根据列表是否为空在主活动中显示片段?,android,android-fragments,Android,Android Fragments,我正在为即将到来的生日开发一款Android应用程序。我有一种方法,可以检查SQLite数据库中的日期,看两天后是否有即将到来的生日,然后加载到列表中。还有两个片段:main片段和BirthdayFragment。在启动应用程序时,我希望仅当列表包含某些内容时显示BirthdayFragment,如果没有,则应显示MainFragment。但当我使用下面的代码启动应用程序时,它显示了一个空的活动。当列表为空和不为空时,我尝试了这个方法 protected void onCreate(Bundle
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//check for upcoming birthday here...
//if we have birthday, display Birthday Fragment
DatabaseOperations dbo = new DatabaseOperations(getApplicationContext());
List<Student> studentList = dbo.getAllStudentsToList();
if (studentList.isEmpty())
//if we don't have any birthday, display main fragment
if (savedInstanceState == null) {
MainFragment fragment = new MainFragment();
replaceFragment(fragment);
}
else {//if we have any birthday, display birthday fragment
BirthdayFragment birthdayFragment = new BirthdayFragment();
replaceFragment(birthdayFragment);
}
}
下面是替换片段的方法
public void replaceFragment(Fragment fragment){
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
fragmentTransaction.replace(R.id.fragment_container, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
我需要你的帮助 尽量不要将其放入savedInstanceState中,而是使用getSupportFragmentManager而不是getFragmentManager@ChataBirthdayFragment是否在后台线程上正确处理sql请求?在删除savedInstanceState If块后,它工作正常。非常感谢。@Lino它不在后台线程中
public void replaceFragment(Fragment fragment){
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
fragmentTransaction.replace(R.id.fragment_container, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}