更换片段时保存片段的更改

时间:2016-06-21 09:26:57

标签: android android-fragments navigation-drawer android-navigation-drawer

我在我的应用程序中实现了Drawer菜单。我的应用程序中有7个不同的片段。包含所有片段的MainActivity是抽屉活动。我已在此活动中覆盖 onBackPressed() 方法。我有一个片段,我希望用户保存他已更改的数据。也就是说,如果用户在一个片段中更改了某些内容而没有保存,如果用户离开片段(通过从抽屉菜单中选择另一个片段或按下后退按钮),那么我想在相同片段上向用户显示确认对话框,其中更改是制作。作为一个例子..如果用户在第六个片段中进行了一些更改并且他离开了片段(通过选择任何其他片段或后退按钮),我想向用户显示第六个片段本身的确认对话框。根据他的输入,他可以移动选定的片段或留在片段中进行一些更改。

这是我的DrawerActivity代码的快照。

 @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;
}

希望我已经明确提出问题,如何实现这一功能?任何帮助将不胜感激:))

谢谢:)

1 个答案:

答案 0 :(得分:0)

将数据保存在片段的 onPause()中。