Итак, как мне, если зайти в настройки из фрагмента C, вернуться к фрагменту C. Вместо фрагмента A?
Я предполагаю, что вы уже добавили действие навигации от Fragment C до Settings fragment , чтобы вы могли перемещаться из Fragment C
на SettingsFragment
.
Итак, вот демонстрационный пример этого действия на графике навигации:
<fragment
android:id="@+id/cFragment"
android:name="...."
android:label="fragment_c"
tools:layout="@layout/fragment_c" >
....
<action
android:id="@+id/action_cFragment_to_settingsFragment"
app:destination="@id/settingsFragment"
app:popUpTo="@id/cFragment" />
</fragment>
Теперь вы хотите нажать кнопку вверх / домой на SettingsFragment
, чтобы вернуться к Fragment C
(или любой другой фрагмент, вызывающий SettingsFragment
.
Вы можете использовать задний стек, чтобы сделать это; где верхний фрагмент в заднем стеке теперь равен FragmentC
, который определяется действием action_cFragment_to_settingsFragment
.
Вы можете использовать onBackPressed()
единственного действия для достижения этого, так что теперь SettingFragment
может вернуться к любому следующему фрагменту в заднем стеке.
Для этого: Создайте SettingsFragment
, как показано ниже:
public class SettingsFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_settings, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setHasOptionsMenu(true);
((AppCompatActivity) requireActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if (item.getItemId() == android.R.id.home) {
requireActivity().onBackPressed(); // Back to the next fragment at the back stack
return true;
}
return super.onOptionsItemSelected(item);
}
}
Примечание: если вы видите кнопку «Домой» на других фрагментах, вы можете удалить ее:
setHasOptionsMenu(false);
((AppCompatActivity) requireActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(false);