私のアプリケーションには引き出しのメニューが実装されています。私は私のアプリで7種類の断片があります。すべてのフラグメントを保持するMainActivityは引き出しアクティビティです。このアクティビティではonBackPressed()
メソッドをオーバーライドしました。私は、彼が変更したデータを保存したいと思っている部分があります。つまり、ユーザーがあるフラグメント内で何かを変更した場合、ユーザーがフラグメントを残していない場合は保存しません(引き出しメニューから別のフラグメントを選択するか、戻るボタンを押すと変更が行われた同じフラグメント上の確認ダイアログが表示されます)。製。たとえば、ユーザーが6番目のフラグメントに何らかの変更を加えた場合、他のフラグメントまたは戻るボタンを選択してフラグメントを残すと、6番目のフラグメント自体に確認ダイアログが表示されます。どこから入力したかに応じて、選択したフラグメントを移動したり、フラグメントを変更したりすることができます。フラグメントが置換されたときのフラグメントの変更を保存します。
ここに私の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;
}
私は質問を明確にしました。どのようにこの機能を達成するのですか?任意の助けもいただければ幸いです:)
感謝:) onPause()フラグメントので
アプリケーションがアクティブになるまでデータを保存/表示したい場合は、グローバルクラスを作成してそこに変数を格納できますが、アプリケーションがアクティブでなくても保存する場合は、SharedPreferenceを使用してデータを保存/ .. – Mohit
私はwebserviceとストアのデータを呼び出したい、問題は私がそれをやろうとしている方法を把握することができないということです。私はフラグメントのonDestroyView()を書いて次のフラグメントのダイアログを表示しています – Newbiee
ここにMainActivityクラスコードを投稿してください –