目前我在settingsfragment
,我有另一个名为ProfileFragment
的片段。现在问题是,通过userinfo list我需要替换fragmnet之类的。如果userinfo == null我应该在settingFragment
或者我应该在ProfileFragment
。
if(userinfolist == null ){
//login screen
FragmentTransaction ft= getFragmentManager().beginTransaction();
ft.replace(R.id.main_frame,settingsFragment);
ft.commit();
}else{
//setting screen
FragmentTransaction ft=getFragmentManager().beginTransaction();
ft.replace(R.id.main_frame,profileFragment);
ft.commit();
}
但是当我执行代码时,我会陷入困境。
答案 0 :(得分:1)
如果你的userinfo列表是arraylist,那么在代码下面使用,并确保你的两个片段都是定义的.. 然后在下面的代码中使用..
List<User> userinfolist = new ArrayList<>();
SettingsFragment settingsFragment = new SettingsFragment();
ProfileFragment profileFragment = new ProfileFragment();
if (userinfolist.isEmpty()) {
//login screen
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.main_frame, settingsFragment);
ft.commit();
} else {
//setting screen
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.main_frame, profileFragment);
ft.commit();
}
答案 1 :(得分:0)
您可以对推送片段的布局进行类型转换,然后使用layout.removeAllViews();
清除布局视图,然后执行其余操作以附加片段,但默认情况下您需要附加一些内容我猜
答案 2 :(得分:0)
您可以创建一个常用的方法来替换更有效的片段,如下面的方法
public void replaceFragment(Fragment fragment) {
getSupportFragmentManager().beginTransaction().replace(R.id.main_frame, fragment);
}
根据您的情况,您可以调用片段。在您的情况下,如果userinfolist是List,那么您可以使用下面的代码。
if(userinfolist!=null&&userinfolist.size()>0)
replaceFragment(new profileFragment(), false);
else
replaceFragment(new SettingFragment(),false);
答案 3 :(得分:0)
尝试使用下面的代码片段,初始化FragmentManager&amp; FragmentTransaction就足够了。
FragmentManager fm = getFragmentManager();
FragmentTransaction fragmentTransaction = fm.beginTransaction();
List<User> userinfolist = new ArrayList<>();
if (userinfolist == null) {
SettingsFragment settingsFragment = new SettingsFragment();
fragmentTransaction.replace(R.id.main_frame,settingsFragment);
} else {
ProfileFragment profileFragment = new ProfileFragment();
fragmentTransaction.replace(R.id.main_frame,profileFragment);
}
fragmentTransaction.commit();