如何处理片段和活动中的后压
Posted
技术标签:
【中文标题】如何处理片段和活动中的后压【英文标题】:how to handle back press in fragments and activity 【发布时间】:2016-11-25 21:23:53 【问题描述】:我有标签片段,其中包含 3 个片段:片段 A 片段 B 片段 c。 1)现在点击片段中的项目A活动打开。在这种情况下如何处理后按和后退按钮。
2) 现在点击来自片段 C 活动的项目会打开,其中包含 3 个选项卡,其中包含片段 X 片段 y 片段 z 。在这种情况下如何处理后按和后退按钮。
谁能帮帮我???
【问题讨论】:
在片段中 getActivity().onBackPressed(); 【参考方案1】:将此代码用于默认后退按钮:
@Override
public void onBackPressed()
super.onBackPressed();
this.finish();
对于后退图像按钮,只需在 onClickListener();
中使用 finish()
Button backButton = (Button)this.findViewById(R.id.back);
backButton.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
finish();
);
如果之前的 Activity 已经关闭,则使用 Intent 进行导航:
Button backButton = (Button)this.findViewById(R.id.back);
backButton.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
Intent i = new Intent(currentActivity.this, previousActivity.class);
startActivity(i);
finish();
);
【讨论】:
我用图像按钮尝试了第二种解决方案,但它直接关闭了应用程序:( 你在哪里应用了这个?? 我有一个片段,其中包含在单击项目活动时打开的recycleview,所以现在在后面按我想从当前活动回到片段我该怎么做?? 我用过intent,但后压不顺畅 检查可能是其他视图需要时间来加载,但如果你想从一个活动移动到另一个活动,你必须使用意图【参考方案2】:首先在加载片段的活动上创建方法。例如,我在活动 NavigationDrawer.class
上加载片段public Fragment getVisibleFragment()
FragmentManager fragmentManager = NavigationDrawer.this.getSupportFragmentManager();
List<Fragment> fragments = fragmentManager.getFragments();
if(fragments != null)
for(Fragment fragment : fragments)
if(fragment != null && fragment.isVisible())
return fragment;
return null;
然后,调用方法
@Override
public void onBackPressed()
//call the method
if (getVisibleFragment()!=null)
//check which current visible fragment
String nameFragment = getVisibleFragment().toString();
if (nameFragment.contains("nameFragmentA"))
//your action A
else if(nameFragment.contains("nameFragmentB"))
//your action B
else
//another action
它可以适用于问题 1 和 2。希望这对你有帮助!
【讨论】:
以上是关于如何处理片段和活动中的后压的主要内容,如果未能解决你的问题,请参考以下文章