关键词:
【中文标题】如何从片段返回主要活动【英文标题】: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示例代码_如何从主要活动开始上课 查看详情