如何从片段返回主要活动

     2023-04-18     182

关键词:

【中文标题】如何从片段返回主要活动【英文标题】:How can I go back to main activity from a Fragment 【发布时间】:2021-03-04 15:33:09 【问题描述】:

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

这是我的代码;

我如何使用抽屉适配器和自定义库(SlidingRootNav-https://github.com/yarolegovich/SlidingRootNav)实现导航抽屉项目;

@Override
    public void onItemSelected(int position) 
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

        if (position == POS_DASHBOARD)

            slidingRootNav.closeMenu();
            transaction.addToBackStack(null);
            transaction.commit();

        

        else if (position == POS_ABOUT_APP)
            ((CoordinatorLayout)findViewById(R.id.root_view)).removeAllViews();

            AboutAppFragment aboutApp = new AboutAppFragment();
            transaction.replace(R.id.container, aboutApp);

            slidingRootNav.closeMenu();
            transaction.addToBackStack(null);
            transaction.commit();

        
        else if (position == POS_ABOUT_DEVELOPERS)
            ((CoordinatorLayout)findViewById(R.id.root_view)).removeAllViews();

            AboutDeveloper aboutDeveloper = new AboutDeveloper();
            transaction.replace(R.id.container, aboutDeveloper);

            slidingRootNav.closeMenu();
            transaction.addToBackStack(null);
            transaction.commit();

        
        

    

片段类

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;

    


【问题讨论】:

【参考方案1】:

使用add 代替replace 进行交易

【讨论】:

【参考方案2】:

我认为这是因为您在方法 addToBackStack 中有 null

 transaction.addToBackStack(null)

因此,当您单击后退按钮时,您不会获得主要活动。

如果您想了解有关 addToBackStack 工作原理的更多信息,我建议您阅读此What is the meaning of addToBackStack with null parameter?

【讨论】:

在我的 addToBackStack 方法中传递 null 参数不是问题。事实上它是解决方案的一部分,因为我需要它来保持活动片段的计数。感谢您的回复:)【参考方案3】:

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

@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);
        

    

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

至于我的 Fragment 类中的顶部导航,我所做的只是添加一个 Intent,当单击工具栏导航图标时调用 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;

    



感谢提出建议的人。

【讨论】:

如何从主要活动中调用片段方法

】如何从主要活动中调用片段方法【英文标题】:Howtocallfragmentmethodfrommainactivity【发布时间】:2016-06-1507:31:12【问题描述】:我在片段类中有方法。我想从主要活动中调用该方法,但我不想使用FragmentById(或)FragmentByTag。我的... 查看详情

如何从主要活动中替换片段

】如何从主要活动中替换片段【英文标题】:Howtoreplaceafragmentfromthemainactivity【发布时间】:2021-10-1322:31:14【问题描述】:我有两个片段,mainactivity最初有一个名为“仪表板片段”的片段单击此按钮后,我必须用名为“仪表板1片... 查看详情

如何将数据从活动发送到其父片段? [复制]

】如何将数据从活动发送到其父片段?[复制]【英文标题】:Howtosenddatafromanactivitytoitsparentfragment?[duplicate]【发布时间】:2016-06-1904:10:48【问题描述】:我有一个主要活动,其中有一个带有图像视图的片段。单击此图像视图时,将... 查看详情

Android:从片段调用时如何从活动中获取返回结果?

】Android:从片段调用时如何从活动中获取返回结果?【英文标题】:Android:HowtogetreturnresultfromactivitywhencallingfromFragment?【发布时间】:2013-09-2709:18:29【问题描述】:我有一个Fragment使用以下方式调用另一个Activity:ProductEditionMainten... 查看详情

启动对话框以获取结果以将值返回给主要活动

...简单的“是”或“取消”选项启动一个对话框片段。我将如何做到这一点,以便当用户单击“确 查看详情

从其他活动返回到同一片段时,如何保存和恢复片段中 RecyclerView 的滚动位置?

】从其他活动返回到同一片段时,如何保存和恢复片段中RecyclerView的滚动位置?【英文标题】:HowtosaveandrestorescrollingpositionoftheRecyclerViewinafragmentwhencomingbackfromotheractivitytothesamefragment?【发布时间】:2019-03-0608:45:07【问题描述】:... 查看详情

如何使用接口将活动回调返回到片段

】如何使用接口将活动回调返回到片段【英文标题】:Howtogetcallbackfromactivitybacktofragmentusinginterface【发布时间】:2017-03-0708:27:04【问题描述】:我有一个片段,其中有一个按钮可以从图库中选择图像。图库已成功打开,但是当我... 查看详情

Android:从 GLSurfaceView 返回主要活动

】Android:从GLSurfaceView返回主要活动【英文标题】:Android:returningtomainactivityfromGLSurfaceView【发布时间】:2012-11-1609:08:10【问题描述】:我不明白我的主要活动和OpenGL渲染器之间的流程。当我的应用启动时,用户会看到一个非常漂... 查看详情

将字符串从对话框片段返回到活动 [重复]

】将字符串从对话框片段返回到活动[重复]【英文标题】:ReturningStringfromDialogFragmentbacktoActivity[duplicate]【发布时间】:2013-02-1319:23:30【问题描述】:我已经阅读了很多关于此的帖子,但我找不到任何适用于此案例的帖子。我有一... 查看详情

从片段返回到上一个活动 onclick back button

...clickbackbutton【发布时间】:2015-05-2505:35:02【问题描述】:如何从片段返回到上一个活动?我不能在片段中覆盖这个函数或者有其他方法,帮助!@OverridepublicvoidonBackPressed()onBackPressed();【问题讨论】:您是否有 查看详情

从排行榜返回时主要活动暂停几秒钟(由于重新加载纹理)

】从排行榜返回时主要活动暂停几秒钟(由于重新加载纹理)【英文标题】:MainActivitypausingforafewsecondswhenreturningfromLeaderboard(duetoreloadingoftextures)【发布时间】:2014-08-0410:15:21【问题描述】:我的应用只有一个活动。当我启动我的... 查看详情

java示例代码_摧毁SurfaceView后如何返回主要活动

java示例代码_摧毁SurfaceView后如何返回主要活动 查看详情

如何将字符串数据从活动发送到片段?

】如何将字符串数据从活动发送到片段?【英文标题】:HowcanIsendstringdatafromactivitytofragment?【发布时间】:2021-01-0401:45:27【问题描述】:我有模块化应用程序。它的“app”模块有一个片段,它在不同的模块中调用活动。然后使用... 查看详情

如何从其他活动访问主要活动中的实例变量和方法? [复制]

】如何从其他活动访问主要活动中的实例变量和方法?[复制]【英文标题】:Howtoaccessinstancevariableandmethodinmainactivityfromotheractivity?[duplicate]【发布时间】:2012-08-2507:33:47【问题描述】:可能重复:Android:Howtodeclareglobalvariables?我想从... 查看详情

如何返回关闭活动之间的活动?

】如何返回关闭活动之间的活动?【英文标题】:Howtoreturntoanactivityclosingtheinbetweenactivities?【发布时间】:2020-03-0410:08:55【问题描述】:我需要回到我的应用程序的主要活动,但为此,我需要关闭当前活动和主要活动之间的所有... 查看详情

从堆栈返回特定活动(代码片段)

...一个类ContentActivity.java。怎么可能呢?更新:一些代码我如何开始活动:publicclassContentActivityextendsActivityimplementsAdapterView.OnItemClickListener@OverrideprotectedvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.activity... 查看详情

从片段返回主页活动而不启动新活动(主页)

】从片段返回主页活动而不启动新活动(主页)【英文标题】:GoingbacktoHomeActivityfromfragmentwithoutstartingthenewAcivity(HomePage)【发布时间】:2016-09-2004:29:03【问题描述】:我有一个列出人员的片段。它在(主)活动中调用,该活动在Pe... 查看详情

java示例代码_如何从主要活动开始上课

java示例代码_如何从主要活动开始上课 查看详情