私の主な活動から、設定ボタンを押すと、フラグメントのコンテナとしてFrameLayoutを持つAppCompatActivityが開きます。 OnCreateメソッドでは、PreferenceScreenコンテナであるフラグメントを追加しています。addBackStackのために2つのフラグメントが重複する
再びオプションと呼ばれる別のボタンを押すと@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings);
Toolbar toolbar = (Toolbar) findViewById(R.id.custom_toolbar);
setSupportActionBar(toolbar);
ActionBar ab = getSupportActionBar();
if (ab != null) {
ab.setDisplayHomeAsUpEnabled(true);
ab.setTitle("Settings");
}
FragmentManager fragmentManager = getSupportFragmentManager();
Fragment fragment = null;
if (savedInstanceState == null) {
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragment = SettingsFragment.newInstance(null);
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();
}
}
は、オプションのフラグメントがbackstackする現在のクラスを追加することで置き換えフラグメントを開きます。私はUPボタンを押すと
は@Override
public boolean onPreferenceStartScreen(PreferenceFragmentCompat caller, PreferenceScreen pref) {
FragmentManager manager = getSupportFragmentManager();
SettingsSubscreenFragment fragment = null;
Bundle args = new Bundle();
switch (pref.getKey()) {
case "pref_key_rejection_options":
getSupportActionBar().setTitle("Rejection Options");
fragment = SettingsSubscreenFragment.newInstance("Options");
break;
}
args.putString(PreferenceFragmentCompat.ARG_PREFERENCE_ROOT, pref.getKey());
if (fragment != null) {
fragment.setArguments(args);
}
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.fragment_container, fragment, pref.getKey());
ft.addToBackStack(null);
ft.commit();
return true;
}
、私はちょうど戻ってスタックをポップしない最初のフラグメント、[設定]、[オプションへのフラグメントを交換しています。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
getSupportActionBar().setTitle("Settings");
FragmentManager fragmentManager;
FragmentTransaction ft;
Fragment fragment = null;
if (getSupportFragmentManager().findFragmentByTag("pref_key_options") != null) {
fragmentManager = getSupportFragmentManager();
ft = fragmentManager.beginTransaction();
fragment = SettingsFragment.newInstance(null);
ft.replace(R.id.fragment_container, fragment);
ft.commit();
fragmentManager.getFragments().clear();
return true;
} else {
return super.onOptionsItemSelected(item);
}
}
return super.onOptionsItemSelected(item);
}
だから、もう一度オプションの断片を開くとバックスタックとonBackPressに別のものを追加しますが、それだけで最上位をポップし、バックスタックに登録されている他のものを重複しその影を残します。
@Override
public void onBackPressed() {
int backStackCount = getSupportFragmentManager().getBackStackEntryCount();
if (backStackCount >= 1) {
getSupportActionBar().setTitle("Settings");
getSupportFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}
ほぼ同じ状況がhere、質問の3枚目の画像からのようですが、私はそれが彼らの提案で動作させることはできません。
私は間違って何をしていますか、私はこの仕事をするために何ができますか?どうもありがとう。
私はこれらのフラグメントに対して 'PreferenceFragmentCompat'を使用していて、それらのフラグメントのコンテナを保持するアクティビティに対しては' AppCompatActivity'を使用しています。 'FragmentTransaction'ではサポートライブラリも使用しています。 –