我在活动中有一个片段,我用作导航抽屉 . 它包含单击时启动新活动的按钮(片段中的startActivity仅调用当前活动的startActivity) .
对于我的生活,我似乎无法弄清楚如何在开始新活动后完成当前的活动 .
我期待在片段中实现这样的事情:
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
if (view == mButtonShows) {
Intent intent = new Intent(view.getContext(), MyNewActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
}
}
但似乎Fragment.class没有实现finish()(就像它实现了startActivity(...)) .
我希望在他们发起第二项活动时清除活动后台 . (所以从新活动中退回会在技术上将它们放回 Launcher )
7 回答
使用片段时,请始终使用
getActivity()
,而不是使用this
或引用上下文 . 你应该打电话从片段完成你的活动 .
实际上...
我不会让Fragment尝试完成Activity . 在我看来,这对片段有太大的权威 . 相反,我会在这里使用指南:http://developer.android.com/training/basics/fragments/communicating.html
让Fragment定义Activity必须实现的接口 . 调用Activity,然后让Activity决定如何处理这些信息 . 如果活动希望自己完成,那么它可以 .
正如Jon F Hancock所提到的,这是一个片段如何通过建议关闭活动来进行活动的 . 这使得片段可移植成为它们的原因 . 如果您在其他活动中使用它,则可能不希望关闭该活动 .
下面的代码是来自活动和片段的片段,其中包含保存和取消按钮 .
PlayerActivity
PlayerInfoFragment,包含调用活动需要实现的接口 .
非常简单...
1-只是在片段中抓取
getActivity()
的活动2-然后拨打
finish();
所以只需
getActivity().finish();
即可完成父活动 .每次我使用完成来关闭片段时,整个活动都会关闭 . 根据文档,只要父活动仍然存在,片段就应该保留 .
相反,我发现我可以使用以下语句将视图更改回父活动:setContentView(R.layout.activity_main);
这会将我返回到父活动 .
我希望这可以帮助其他可能正在寻找此事的人 .
您应该使用getActivity()方法来完成片段中的活动 .
是
Fragment.class
未实现finish()
使用片段时,请始终使用
getActivity()
,而不是使用此片段或引用上下文 . 你应该打电话