【问题标题】:Close a fragment on button click which is inside that fragment单击该片段内的按钮关闭片段
【发布时间】:2017-03-27 10:28:34
【问题描述】:

我有一个带有两个按钮的片段 - 确认和取消。一个按钮,即确认按钮,从 EditText 获取用户输入并将其转换为 USSD 请求。现在我想让取消按钮关闭该片段,就像 alertDialog 上的否定按钮一样。

我已经阅读了许多与此有点相似的问题,但似乎没有一个能够满足我的需求。

public void onClick(View v) {
        switch (v.getId()) {
            case R.id.confirmButton:

                if (inputField.getText().toString().trim().length() == 16) {
                    load();
                    inputField.requestFocus();
                } else if (inputField.getText().toString().trim().length() < 16) {
                    Toast.makeText(getActivity(), R.string.toast_number_not_valid, Toast.LENGTH_SHORT).show();
                }

                break;

            case R.id.cancelButton:
                dismiss();
                break;
        }
    }

 private void load() {
// bla - bla - bla
}

public void dismiss(){
//dear fragment, I don't need you right now, just dismiss
}

这里我需要dismiss() 方法。

任何帮助将不胜感激。

【问题讨论】:

  • getActivity().finish();
  • 从主activity启动fragment这个不会退出应用吗? @SatanPandeya

标签: java android android-fragments onclicklistener


【解决方案1】:

只要打电话:

getActivity().onBackPressed();

【讨论】:

  • 我试过一次。它立即完成,因为片段不是活动。当您按下返回时,它会完成整个活动。
【解决方案2】:

oskarko 的解决方案有效,但它让您回到主 Activity。

如果您希望从 Fragment 内部关闭 Fragment 并且不想离开当前 Activity, 试试这个方法:

getFragmentManager().beginTransaction().remove(ActivityFragment.this).commit(); 

其中“ActivityFragment”是您的 Fragment 的名称。

考虑一下: 如果你添加你的 FragmentManager 将 Fragment 添加到 backStack (fragmentTransaction.addToBackStack(null);),你不应该使用这种方法,而是使用:

getFragmentManager().popBackStack(); 

原因是如果你用第一种方法关闭它,你的Fragment还在backStack,你必须点击两次Previous Button才能进入上一个Activity。

【讨论】:

    【解决方案3】:

    科特林:

    活动中:

    val fragment = SettingFragment.newInstance()
    
    // always create a new transaction to avoid crash
    val mTransaction = fragmentManager.beginTransaction()
    mTransaction.add(R.id.settingDrawer, fragment)
    mTransaction.commit()
    

    在片段中:

    val manager = requireActivity().supportFragmentManager
    manager.beginTransaction().remove(this).commit()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-18
      • 2014-07-28
      相关资源
      最近更新 更多