我正在使用导航组件体系结构。我在操作栏中有一个菜单项,用户可以单击以转到设置。我正在使用一个活动到多个碎片的方法。因此,带有菜单项的该操作栏位于我的所有片段中。
我说我有3个片段。片段A是主要片段。在设置首选项中时,“ UP”按钮始终将我带回到片段A。即使我是从片段B或C调用它的。
这就是我的向上按钮(它称为here)的意思:
这是我实际的NavGraph
从中您可以看到Frag A通过操作链接到设置。我这样做是因为这是片段的宿主活动开始的起始片段。无论如何,我删除此操作并没有什么不同,它的行为仍然相同。
这是我的onOptionsItemSelected
//Preform action when selected
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return NavigationUI.onNavDestinationSelected(item, navController)
|| super.onOptionsItemSelected(item);
}
那么,如果要从片段C进行设置,我该如何回到片段C。而不是片段A?
答案 0 :(得分:0)
那么,如果要从片段C进行设置,我该如何回到片段C。而不是片段A?
我假设您已经将导航操作从片段C 添加到 Settings片段,以便您可以从Fragment C
导航到{{1} }。
因此,这是在导航图上演示此操作的示例:
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);
}
}
答案 1 :(得分:0)