Android 当片段被替换时保存对片段的更改

Android 当片段被替换时保存对片段的更改,android,android-fragments,navigation-drawer,Android,Android Fragments,Navigation Drawer,我已经在我的应用程序中实现了抽屉菜单。我的应用程序中有7个不同的片段。保存所有片段的主活动是抽屉活动。我已在此活动中重写了onBackPressed()方法。我有一个片段,我希望用户保存他更改的数据。也就是说,如果用户在一个片段中更改了某些内容,并且没有保存它,如果用户离开了该片段(通过从抽屉菜单中选择另一个片段或按下后退按钮),那么我希望在进行更改的同一片段上向用户显示确认对话框。例如。。如果用户在第六个片段中做了一些更改,并且他离开了该片段(通过选择任何其他片段或后退按钮),我想向用户显示一

我已经在我的应用程序中实现了抽屉菜单。我的应用程序中有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,则碎片检查变量。