簡體   English   中英

單擊按鈕關閉該片段內的片段

[英]Close a fragment on button click which is inside that fragment

我有一個帶有兩個按鈕的片段 - 確認和取消。 一個按鈕,即確認按鈕,從 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().onBackPressed();

oskarko 的解決方案有效,但它使您回到主要活動。

如果您希望 Fragment 從 Fragment 內部關閉並且不想離開當前 Activity,請嘗試以下方法:

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

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

考慮一下:如果您添加 FragmentManager 將 Fragment 添加到backStack ( fragmentTransaction.addToBackStack(null); ),則不應使用此方法,而是使用:

getFragmentManager().popBackStack(); 

這樣做的原因是如果你用第一種方法關閉它,你的 Fragment 仍然在backStack 中,你必須點擊上一個按鈕兩次才能到達上一個活動。

科特林:

在活動中:

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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM