Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何根据列表是否为空在主活动中显示片段?_Android_Android Fragments - Fatal编程技术网

Android 如何根据列表是否为空在主活动中显示片段?

Android 如何根据列表是否为空在主活动中显示片段?,android,android-fragments,Android,Android Fragments,我正在为即将到来的生日开发一款Android应用程序。我有一种方法,可以检查SQLite数据库中的日期,看两天后是否有即将到来的生日,然后加载到列表中。还有两个片段:main片段和BirthdayFragment。在启动应用程序时,我希望仅当列表包含某些内容时显示BirthdayFragment,如果没有,则应显示MainFragment。但当我使用下面的代码启动应用程序时,它显示了一个空的活动。当列表为空和不为空时,我尝试了这个方法 protected void onCreate(Bundle

我正在为即将到来的生日开发一款Android应用程序。我有一种方法,可以检查SQLite数据库中的日期,看两天后是否有即将到来的生日,然后加载到列表中。还有两个片段:main片段和BirthdayFragment。在启动应用程序时,我希望仅当列表包含某些内容时显示BirthdayFragment,如果没有,则应显示MainFragment。但当我使用下面的代码启动应用程序时,它显示了一个空的活动。当列表为空和不为空时,我尝试了这个方法

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();
}