Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何向已打开活动的操作栏中的片段添加后退按钮?_Java_Android_Android Layout_Navigationview - Fatal编程技术网

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如果对您有帮助,您可以标记为正确答案吗