加载另一个片段时,片段数据变为空
Fragment data is going null when another fragment loaded
在NavigationDrawer
我要拿两个碎片。在每个片段中,我都有选项卡滑块。当我第一次点击时,两个片段中的数据都出现了,但是当我从一个片段转到另一个片段时,两个片段中的数据都是空的。我已经检查了片段的保存状态,但问题仍然没有解决。知道我们如何解决这个问题吗?
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
if (navigationView != null) {
setupDrawerContent(navigationView);
mFragmentManager = getSupportFragmentManager();
mFragmentTransaction = mFragmentManager.beginTransaction();
mFragmentTransaction.replace(R.id.frame, new LoginFragment()).commit();
}
private void setupDrawerContent(NavigationView navigationView) {
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
System.out.println("Navigation Drawer Item Clciked ---->" + navDrawerClickedItem);
Fragment fragment = null;
switch (menuItem.getItemId()) {
case R.id.roof:
if (navDrawerClickedItem == menuItem.getItemId()) {
mDrawerLayout.closeDrawer(Gravity.LEFT);
System.out.println("New roof Fragment already loaded");
} else {
navDrawerClickedItem = menuItem.getItemId();
FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.frame, new RoofTabFragment()).commit();
System.out.println("New roof Fragment Created");
}
break;
case R.id.floor:
if (navDrawerClickedItem == menuItem.getItemId()) {
mDrawerLayout.closeDrawer(Gravity.LEFT);
System.out.println("Floor Fragment already loaded");
} else {
navDrawerClickedItem = menuItem.getItemId();
FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.frame, new FloorTabFragment()).commit();
System.out.println("Floor Fragment Created");
}
break;
case R.id.signOut:
LogMeOut();
break;
}
if (fragment != null) {
mFragmentManager.beginTransaction().replace(R.id.frame_container, fragment).commit();
} else {
Log.e("MainActivity", "Error in creating fragment");
}
menuItem.setChecked(true);
setTitle(menuItem.getTitle());
mDrawerLayout.closeDrawers();
return false;
}
});
}
嘿,我过去在这种情况下遇到过这样的问题,我所做的是在 Main Activity 或 First 中创建一个静态字段Activity 并在那里获取所有数据并给它 setter 和 getter方法和数据将是静态的,可以通过应用程序访问,数据不会改变
这样,您的数据将与所有 片段 和预加载数据通用,并且数据也将是单例的
通过将 getFragmentManager(
) 替换为 viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));
中的 getChildFragmentManager()
解决了问题。
在NavigationDrawer
我要拿两个碎片。在每个片段中,我都有选项卡滑块。当我第一次点击时,两个片段中的数据都出现了,但是当我从一个片段转到另一个片段时,两个片段中的数据都是空的。我已经检查了片段的保存状态,但问题仍然没有解决。知道我们如何解决这个问题吗?
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
if (navigationView != null) {
setupDrawerContent(navigationView);
mFragmentManager = getSupportFragmentManager();
mFragmentTransaction = mFragmentManager.beginTransaction();
mFragmentTransaction.replace(R.id.frame, new LoginFragment()).commit();
}
private void setupDrawerContent(NavigationView navigationView) {
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
System.out.println("Navigation Drawer Item Clciked ---->" + navDrawerClickedItem);
Fragment fragment = null;
switch (menuItem.getItemId()) {
case R.id.roof:
if (navDrawerClickedItem == menuItem.getItemId()) {
mDrawerLayout.closeDrawer(Gravity.LEFT);
System.out.println("New roof Fragment already loaded");
} else {
navDrawerClickedItem = menuItem.getItemId();
FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.frame, new RoofTabFragment()).commit();
System.out.println("New roof Fragment Created");
}
break;
case R.id.floor:
if (navDrawerClickedItem == menuItem.getItemId()) {
mDrawerLayout.closeDrawer(Gravity.LEFT);
System.out.println("Floor Fragment already loaded");
} else {
navDrawerClickedItem = menuItem.getItemId();
FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.frame, new FloorTabFragment()).commit();
System.out.println("Floor Fragment Created");
}
break;
case R.id.signOut:
LogMeOut();
break;
}
if (fragment != null) {
mFragmentManager.beginTransaction().replace(R.id.frame_container, fragment).commit();
} else {
Log.e("MainActivity", "Error in creating fragment");
}
menuItem.setChecked(true);
setTitle(menuItem.getTitle());
mDrawerLayout.closeDrawers();
return false;
}
});
}
嘿,我过去在这种情况下遇到过这样的问题,我所做的是在 Main Activity 或 First 中创建一个静态字段Activity 并在那里获取所有数据并给它 setter 和 getter方法和数据将是静态的,可以通过应用程序访问,数据不会改变
这样,您的数据将与所有 片段 和预加载数据通用,并且数据也将是单例的
通过将 getFragmentManager(
) 替换为 viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));
中的 getChildFragmentManager()
解决了问题。