Java 如何从片段返回到主要活动

Java 如何从片段返回到主要活动,java,android,android-fragments,navigation-drawer,Java,Android,Android Fragments,Navigation Drawer,我成功地实现了底部导航抽屉,并使用了片段。现在我可以从抽屉菜单切换片段。 我这里的问题是,当我从抽屉菜单(例如:关于开发者)打开一个项目时,当用户单击后退按钮时,它会关闭应用程序。相反,我希望用户从任何片段返回到主活动。帮我个忙,我没有多少经验 这是我的密码 如何使用带有自定义库的抽屉适配器(SlidingRootNav-)实现nav抽屉项 片段类 import android.os.Bundle; import androidx.appcompat.widget.Toolbar; import

我成功地实现了底部导航抽屉,并使用了片段。现在我可以从抽屉菜单切换片段。 我这里的问题是,当我从抽屉菜单(例如:关于开发者)打开一个项目时,当用户单击后退按钮时,它会关闭应用程序。相反,我希望用户从任何片段返回到主活动。帮我个忙,我没有多少经验

这是我的密码

如何使用带有自定义库的抽屉适配器(SlidingRootNav-)实现nav抽屉项

片段类

import android.os.Bundle;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;



public class AboutDeveloper extends Fragment  {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        ViewGroup root = (ViewGroup) inflater.inflate(R.layout.fragment_about_developer,container, false);


        // Here I implemented a toolbar at the top for navigation purpose
        // but on clicking on the nav icon, the app closes, instead i want to return to the main activity

        Toolbar toolbar = root.findViewById(R.id.return_home);
        toolbar.setNavigationIcon(R.drawable.ic_baseline_arrow_back_24);
        toolbar.setTitle("About Developer");


        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getActivity().onBackPressed();
            }
        });
        return root;

    }

}

对于您的事务使用
add
而不是
replace
我认为这是因为addToBackStack方法中有null

 transaction.addToBackStack(null)
因此,当您单击“后退”按钮时,不会获得主要活动


如果您想了解更多关于addToBackStack的工作原理,我建议您阅读此

在做了一些挖掘之后,我终于找到了解决方法。我所要做的就是从主活动(在我的例子中是HomeActivity.class)向onBackPressed方法添加一个调整

NBaddToBackStack必须在片段事务期间使用,以记录片段何时处于活动状态。 说
transaction.addToBackStack(null)

至于Fragment类中的顶部导航,我所做的只是添加一个意图,在单击工具栏导航图标时调用home活动

public class AboutDeveloper extends Fragment  {

    Intent intent;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        ViewGroup root = (ViewGroup) inflater.inflate(R.layout.fragment_about_developer,container, false);


        intent = new Intent(getActivity(), HomeActivity.class);

        Toolbar toolbar = root.findViewById(R.id.return_home);
        toolbar.setNavigationIcon(R.drawable.ic_baseline_arrow_back_ios_24);
        toolbar.setTitle("About Developer");
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(intent);
                getActivity().finish();
            }
        });
        return root;

    }


}

感谢那些提出建议的人。

在我的addToBackStack方法中传递null参数不是问题。。事实上,它是解决方案的一部分,因为我需要它来记录活动片段的数量。感谢您的回复:)
@Override
    public void onBackPressed() {

        //Return to home activity from any active fragment
        if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
            Intent intent = new Intent(this, HomeActivity.class);
            startActivity(intent);
        }

        //To close nav drawer
        else if(slidingRootNav.isMenuOpened()){
            slidingRootNav.closeMenu();

        }
        else {
            moveTaskToBack(true);
        }

    }
public class AboutDeveloper extends Fragment  {

    Intent intent;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        ViewGroup root = (ViewGroup) inflater.inflate(R.layout.fragment_about_developer,container, false);


        intent = new Intent(getActivity(), HomeActivity.class);

        Toolbar toolbar = root.findViewById(R.id.return_home);
        toolbar.setNavigationIcon(R.drawable.ic_baseline_arrow_back_ios_24);
        toolbar.setTitle("About Developer");
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(intent);
                getActivity().finish();
            }
        });
        return root;

    }


}