从片段中完成当前活动
我在一个活动中使用了一个片段作为导航抽屉。 它包含button,当单击开始新的活动(片段中的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(…))。
当他们开展第二项活动的时候,我希望活动背景清除。 (因此,从新的活动中压回来,在技术上将它们放回到发射器)
当使用片段时,不要使用this
或者引用上下文,总是使用getActivity()
。 你应该打电话
getActivity().finish();
从片段完成您的活动。
实际上…
我不会有片段尝试完成活动。 在我看来,这太过分了。 相反,我会在这里使用指南: http : //developer.android.com/training/basics/fragments/communicating.html
让Fragment定义一个Activity必须实现的接口。 打电话给活动,然后让活动决定如何处理这些信息。 如果活动希望完成,那么它可以。
正如Jon F Hancock所提到的,这是一个片段如何通过暗示活动结束来“closures”活动。 这使得片段可移植,这是他们的原因。 如果您在不同的活动中使用它,则可能不想closures该活动。
下面的代码是一个活动和片段,其中有一个保存和取消button片段。
PlayerActivity
public class PlayerActivity extends Activity implements PlayerInfo.PlayerAddListener { public void onPlayerCancel() { // Decide if its suitable to close the activity, //eg is an edit being done in one of the other fragments? finish(); } }
PlayerInfoFragment,其中包含调用活动需要实现的接口。
public class PlayerInfoFragment extends Fragment { private PlayerAddListener callback; // implemented in the Activity @Override public void onAttach(Activity activity) { super.onAttach(activity); callback= (PlayerAddListener) activity; } public interface PlayerAddListener { public void onPlayerSave(Player p); // not shown in impl above public void onPlayerCancel(); } public void btnCancel(View v) { callback.onPlayerCancel(); // the activity's implementation } }
每次我使用完成closures片段,整个活动closures。 根据文件,片段应该保持,只要父母的活动仍然存在。
相反,我发现我可以通过使用以下语句将视图更改回父活动:setContentView(R.layout.activity_main);
这使我回到父活动。
我希望这可以帮助别人谁可能正在寻找这个。
很简单…
1-只需通过片段中的getActivity()
获取活动
2-然后调用finish();
所以只需getActivity().finish();
将完成家长的活动。
您应该使用getActivity()方法来完成片段中的活动。
getActivity().finish();
是Fragment.class
没有实现finish()
当使用片段时,不要使用这个或者引用上下文,总是使用getActivity()
。 你应该打电话