Android 当片段被替换时保存对片段的更改
我已经在我的应用程序中实现了抽屉菜单。我的应用程序中有7个不同的片段。保存所有片段的主活动是抽屉活动。我已在此活动中重写了onBackPressed()方法。我有一个片段,我希望用户保存他更改的数据。也就是说,如果用户在一个片段中更改了某些内容,并且没有保存它,如果用户离开了该片段(通过从抽屉菜单中选择另一个片段或按下后退按钮),那么我希望在进行更改的同一片段上向用户显示确认对话框。例如。。如果用户在第六个片段中做了一些更改,并且他离开了该片段(通过选择任何其他片段或后退按钮),我想向用户显示一个关于第六个片段本身的确认对话框。根据他的输入,他可以从那里移动所选片段或停留在片段中进行一些更改 这是我抽屉的代码快照Android 当片段被替换时保存对片段的更改,android,android-fragments,navigation-drawer,Android,Android Fragments,Navigation Drawer,我已经在我的应用程序中实现了抽屉菜单。我的应用程序中有7个不同的片段。保存所有片段的主活动是抽屉活动。我已在此活动中重写了onBackPressed()方法。我有一个片段,我希望用户保存他更改的数据。也就是说,如果用户在一个片段中更改了某些内容,并且没有保存它,如果用户离开了该片段(通过从抽屉菜单中选择另一个片段或按下后退按钮),那么我希望在进行更改的同一片段上向用户显示确认对话框。例如。。如果用户在第六个片段中做了一些更改,并且他离开了该片段(通过选择任何其他片段或后退按钮),我想向用户显示一
@Override
public void onBackPressed() {
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
if (mBackPressed + TIME_INTERVAL > System.currentTimeMillis())
{
super.onBackPressed();
AppConstants.SELECTED_NAVIGATION_TAB=0;
return;
}
else { Toast.makeText(getBaseContext(), "Tap back button in order to exit", Toast.LENGTH_SHORT).show(); }
mBackPressed = System.currentTimeMillis();
}
}
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
Fragment fragment = null;
switch (id) {
case R.id.nav_home:
AppConstants.SELECTED_NAVIGATION_TAB = 0;
fragment = new HomeFragment();
title = getResources().getString(R.string.home);
break;
case R.id.nav_progress:
AppConstants.SELECTED_NAVIGATION_TAB = 1;
fragment = new ProgressFragment();
title = getResources().getString(R.string.progress);
break;
case R.id.nav_workouts:
AppConstants.SELECTED_NAVIGATION_TAB = 2;
/* if (Utilities.getInstance().getPreferences(DrawerActivity.this, AppConstants.PREF_KEY_USER_INFO,
AppConstants.PREF_KEY_SUBSCRIPTION_STATUS, "").equals("1")){
fragment = new FragmentPremiumClasses();
title = getResources().getString(R.string.premium);
}else {*/
fragment = new WorkoutsFragment();
title = getResources().getString(R.string.workouts);
// }
break;
case R.id.nav_subscription:
AppConstants.SELECTED_NAVIGATION_TAB = 3;
if (!Utilities.getInstance().getPreferences(DrawerActivity.this, AppConstants.PREF_KEY_USER_INFO,
AppConstants.PREF_KEY_SUBSCRIPTION_STATUS, "").equals("1")){
fragment = new SubscriptionFragment();
title = getResources().getString(R.string.subscription);
} else {
fragment = new SelectSocietyFragment();
title = getResources().getString(R.string.newsubscription);
}
break;
case R.id.nav_aboutUs:
AppConstants.SELECTED_NAVIGATION_TAB = 4;
fragment = new AboutUsFragment();
title = getResources().getString(R.string.aboutus);
break;
case R.id.nav_settings:
AppConstants.SELECTED_NAVIGATION_TAB = 5;
fragment = new SettingsFragment();
title = getResources().getString(R.string.settings);
break;
case R.id.nav_logout:
drawer.closeDrawer(GravityCompat.START);
isLogoutClicked = true;
SharedPreferences.Editor editor = getSharedPreferences(AppConstants.PREF_KEY_USER_INFO,
Context.MODE_PRIVATE).edit();
editor.clear();
editor.commit();
AppConstants.SELECTED_NAVIGATION_TAB = 0;
Utilities.getInstance().finishAndStartIntent(DrawerActivity.this, MainActivity.class, 0, 0);
break;
}
if (!isLogoutClicked) {
getSupportActionBar().setTitle(title);
android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame, fragment);
fragmentTransaction.commit();
drawer.closeDrawer(GravityCompat.START);
}
return true;
}
希望我已经明确了这个问题,如何实现这个功能?任何帮助都将不胜感激:)
谢谢:)将数据保存在片段的onPause()中。将数据保存在片段的onPause()中。如果您希望数据只存储/显示到应用程序处于活动状态,那么您可以在其中创建全局类并在变量中存储值,但如果您想存储,即使应用程序未处于活动状态,然后使用SharedReference来存储/检索数据..我想调用一个Web服务并存储数据,问题是我不知道该怎么做。如果我写onDestroyView()对于fragment,则在下一个fragment上显示对话框在此张贴您的MainActivity类代码如果我在settings fragment中更改了某些内容,然后选择其他片段,则我希望在替换fragment之前显示警报如果您希望数据只存储/显示到应用程序处于活动状态,则您可以创建全局类并在中存储值变量,但如果即使应用程序未处于活动状态也要存储数据,则使用SharedReference来存储/检索数据。我想调用Web服务并存储数据,问题是我无法确定如何执行此操作。如果我写onDestroyView()对于fragment,则在下一个fragment上显示对话框在此张贴您的MainActivity类代码如果我在settings fragment中更改了某些内容,然后选择其他一些片段,则在替换应用程序类中的fragmentTake标志之前,我要显示警报。假设用户在edittext上写入了某些内容,而不是将该标志设置为true。在drawer上如果标志为true而不是show alert,则碎片检查变量。在应用程序类中使用标志。假设用户正在edittext上写入内容,则将该标志设置为true。如果标志为true而不是show alert,则碎片检查变量。