首页 文章

从片段中完成当前活动

提问于
浏览
75

我在活动中有一个片段,我用作导航抽屉 . 它包含单击时启动新活动的按钮(片段中的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 回答

  • 6

    使用片段时,请始终使用 getActivity() ,而不是使用 this 或引用上下文 . 你应该打电话

    getActivity().finish();
    

    从片段完成你的活动 .

  • 0

    实际上...

    我不会让Fragment尝试完成Activity . 在我看来,这对片段有太大的权威 . 相反,我会在这里使用指南:http://developer.android.com/training/basics/fragments/communicating.html

    让Fragment定义Activity必须实现的接口 . 调用Activity,然后让Activity决定如何处理这些信息 . 如果活动希望自己完成,那么它可以 .

  • 21

    正如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();
        }
    }
    

    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
       }
    }
    
  • 1

    非常简单...

    1-只是在片段中抓取 getActivity() 的活动

    2-然后拨打 finish();

    所以只需 getActivity().finish(); 即可完成父活动 .

  • 2

    每次我使用完成来关闭片段时,整个活动都会关闭 . 根据文档,只要父活动仍然存在,片段就应该保留 .

    相反,我发现我可以使用以下语句将视图更改回父活动:setContentView(R.layout.activity_main);

    这会将我返回到父活动 .

    我希望这可以帮助其他可能正在寻找此事的人 .

  • 1

    您应该使用getActivity()方法来完成片段中的活动 .

    getActivity().finish();
    
  • 222

    try to use this

    Fragment.class 未实现 finish()

    使用片段时,请始终使用 getActivity() ,而不是使用此片段或引用上下文 . 你应该打电话

相关问题