我在活动中有一个片段,我用作导航抽屉.它包含单击时启动新活动的按钮(片段中的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();
}
}
Run Code Online (Sandbox Code Playgroud)
但似乎Fragment.class没有实现finish()(就像它实现了startActivity(...)).
我希望在他们启动第二项活动时清除活动后台.(所以从新活动中退回会在技术上将它们放回发射器)
cod*_*e22 250
使用片段this
时,请始终使用,而不是使用或引用上下文getActivity()
.你应该打电话
getActivity().finish();
Run Code Online (Sandbox Code Playgroud)
从片段完成你的活动.
Jon*_*ock 24
实际上...
我不会让Fragment尝试完成Activity.在我看来,这对片段放置了太多的权威.相反,我会在这里使用指南:http://developer.android.com/training/basics/fragments/communicating.html
让Fragment定义Activity必须实现的接口.调用Activity,然后让Activity决定如何处理这些信息.如果活动希望自己完成,那么它可以.
正如Jon F Hancock所提到的,这就是片段如何通过建议关闭活动来"关闭"活动.这使得片段便携,因为它们是原因.如果您在其他活动中使用它,则可能不希望关闭该活动.
下面的代码是来自活动和片段的片段,其中包含保存和取消按钮.
PlayerActivity
public class PlayerActivity extends Activity
implements PlayerInfo.PlayerAddListener {
public void onPlayerCancel() {
// Decide if its suitable to close the activity,
//e.g. is an edit being done in one of the other fragments?
finish();
}
}
Run Code Online (Sandbox Code Playgroud)
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
}
}
Run Code Online (Sandbox Code Playgroud)
这不需要断言,android JetPack 中片段的最新更新
requireActivity().finish();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
104994 次 |
最近记录: |