关闭该片段内部按钮单击的片段

esQ*_*mo_ 3 android android-fragments onclicklistener

我有一个带有两个按钮的片段 - 确认并取消.一个按钮,即确认按钮,从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
}
Run Code Online (Sandbox Code Playgroud)

这里我需要dismiss()方法.

任何帮助将不胜感激.

osk*_*rko 18

只需致电:

getActivity().onBackPressed();
Run Code Online (Sandbox Code Playgroud)

  • 我试过一次。它立即完成,因为该片段不是一个活动。当您按回时,整个活动就完成了。 (2认同)

DrG*_*use 9

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

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

getFragmentManager().beginTransaction().remove(ActivityFragment.this).commit(); 
Run Code Online (Sandbox Code Playgroud)

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

考虑一下:如果您添加 FragmentManager 将 Fragment 添加到backStack ( fragmentTransaction.addToBackStack(null);),则不应使用此方法,而是使用:

getFragmentManager().popBackStack(); 
Run Code Online (Sandbox Code Playgroud)

这样做的原因是如果你用第一种方法关闭它,你的 Fragment 仍然在backStack 中,你必须点击上一个按钮两次才能到达上一个活动。


Hom*_*ang 5

科特林:

活动中:

val fragment = SettingFragment.newInstance()

// always create a new transaction to avoid crash
val mTransaction = fragmentManager.beginTransaction()
mTransaction.add(R.id.settingDrawer, fragment)
mTransaction.commit()
Run Code Online (Sandbox Code Playgroud)

在片段中:

val manager = requireActivity().supportFragmentManager
manager.beginTransaction().remove(this).commit()
Run Code Online (Sandbox Code Playgroud)