Java 如何向已打开活动的操作栏中的片段添加后退按钮?
我有一个Java 如何向已打开活动的操作栏中的片段添加后退按钮?,java,android,android-layout,navigationview,Java,Android,Android Layout,Navigationview,我有一个家庭活动,它实现了导航视图,没有工具栏(带有ActionBar)。在本活动中,我实现了用于导航到设置片段的onNavigationItemSelected: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_menu); ActionBar
家庭活动
,它实现了导航视图
,没有工具栏(带有ActionBar)。在本活动中,我实现了用于导航到设置片段的onNavigationItemSelected
:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
}
// more code
getSupportFragmentManager().beginTransaction().replace(R.id.container,new DashboardActivity()).commit();
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
// more code
getSupportFragmentManager().beginTransaction().replace(R.id.container,new SettingsFragment()).commit();
}
在SettingsFragment
片段中,我有一个侦听器来打开一个新活动:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
fragmentView = inflater.inflate(R.layout.activity_settings, container, false);
FloatingActionButton fab = (FloatingActionButton) fragmentView.findViewById(R.id.myfab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getActivity(), SubSettingsActivity.class);
fragmentView.getContext().startActivity(intent);
startActivity(intent);
}
});
return fragmentView;
}
NavController mNavigationController = Navigation.findNavController(this,R.id.nav_host_frag);
NavigationUI.setupActionBarWithNavController(this, mNavigationController);
@Override
public boolean onSupportNavigateUp() {
return mNavigationController.navigateUp();
}
@Override
public void onBackPressed() {
super.onBackPressed();
}
它打开一个活动,但没有返回上一个片段的后退按钮。在操作栏中添加此按钮的正确方法是什么
编辑:我希望按钮返回到上一个片段设置片段
,而不是保存片段的活动。为什么实现NavigationView
如此困难?您的子活动主题应该扩展
主题、应用程序、灯光、暗色操作栏
然后在java中执行onCreate
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
}
然后在AndroidManifest中声明子设置活动do:
android:parentActivity=“您的活动”
您的_活动是保存片段的活动
编辑:
如果你想导航回设置片段,最好使用Android Jetpack导航组件。
它让你看起来毫无意义地使用片段。
以下是链接:
如何实现导航组件:简单的方法
第1步:
添加所需的依赖项
implementation 'androidx.navigation:navigation-fragment:2.3.0-alpha05'
implementation 'androidx.navigation:navigation-ui:2.3.0-alpha05'
第二步:
转到Android Studio上的res文件夹,右键单击它,新建>Android资源文件
您将看到以下对话框:
注意资源类型,您必须选择导航
步骤3:既然已经创建了片段,请转到保存片段的活动xml,例如activity_main.xml,添加以下内容:
<fragment
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/adView"
android:name="androidx.navigation.fragment.NavHostFragment"
app:defaultNavHost="true"
app:navGraph="@navigation/main_nav"
android:id="@+id/nav_host_frag"/>
NavController将允许您导航,我通常在ViewCreated()上实例化它
然后:
要使用片段设置actionbar,请将以下代码放入host activity的onCreate()中:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
fragmentView = inflater.inflate(R.layout.activity_settings, container, false);
FloatingActionButton fab = (FloatingActionButton) fragmentView.findViewById(R.id.myfab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getActivity(), SubSettingsActivity.class);
fragmentView.getContext().startActivity(intent);
startActivity(intent);
}
});
return fragmentView;
}
NavController mNavigationController = Navigation.findNavController(this,R.id.nav_host_frag);
NavigationUI.setupActionBarWithNavController(this, mNavigationController);
@Override
public boolean onSupportNavigateUp() {
return mNavigationController.navigateUp();
}
@Override
public void onBackPressed() {
super.onBackPressed();
}
此外,在主机活动中:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
fragmentView = inflater.inflate(R.layout.activity_settings, container, false);
FloatingActionButton fab = (FloatingActionButton) fragmentView.findViewById(R.id.myfab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getActivity(), SubSettingsActivity.class);
fragmentView.getContext().startActivity(intent);
startActivity(intent);
}
});
return fragmentView;
}
NavController mNavigationController = Navigation.findNavController(this,R.id.nav_host_frag);
NavigationUI.setupActionBarWithNavController(this, mNavigationController);
@Override
public boolean onSupportNavigateUp() {
return mNavigationController.navigateUp();
}
@Override
public void onBackPressed() {
super.onBackPressed();
}
但是如何让它进入设置片段插入家庭活动
?谢谢你的建议,但我只是迁移到了这种方式,所以我更愿意坚持。一旦你看到它有多简单,你会喜欢它,因为这个问题没有其他答案,你能扩展一下关于Android Jetpack导航组件的答案吗?是否适用于API 16?如何将其添加到代码中?我阅读了文档,其中的示例看起来与我需要的不同。@vesii如果对您有帮助,您可以标记为正确答案吗