Подтвердить что ты не робот

Как закрыть текущий фрагмент с помощью кнопки, как кнопка "Назад"?

Я попытался закрыть текущий фрагмент с помощью Imagebutton.

Я нахожусь во Фрагменте-A, и когда я нажму кнопку, он превратится во Фрагмент-B.

И когда я нажимаю кнопку в Фрагменте-B, он поворачивается к Фрагменту-C и закрывает Фрагмент-B.

Если я нажму кнопку "Назад" на Fragment-C, он вернется к Fragment-A.

Код, который я пробовал, похож на следующий

camera_album = (ImageButton) view.findViewById(R.id.camera_album);

camera_album.setOnClickListener(new Button.OnClickListener() {
    @Override
    public void onClick(View v) {

                    closefragment();
        Fragment fragment = FileBrowserFragment.newInstance(null, null, null) ;
        MainActivity.addFragment(LocalFileBrowserFragment.this, fragment) ;


    }
});

private void closefragment() {
    getActivity().getFragmentManager().beginTransaction().remove(this).commit();
}

Когда я нажимаю кнопку "Назад" во фрагменте-B, она превращается во фрагмент-C.

Но когда я нажимаю кнопку "Назад" на Fragment-C, он не возвращается к Fragment-A. Вернемся к пустому фону. Если я хочу вернуться к Fragment-A, я должен нажать кнопку "Назад" еще раз.

ТАК, кажется, не закрывает текущий фрагмент завершен.

Как закончить текущий фрагмент, как кнопка возврата Android?

4b9b3361

Ответ 1

Из фрагмента A, чтобы перейти к B, замените A на B и используйте addToBackstack() до commit().

Теперь из фрагмента B, чтобы перейти на C, сначала используйте popBackStackImmediate(), это вернет A. Теперь замените A на C, как и на первую транзакцию.

Ответ 2

Я меняю код из getActivity().getFragmentManager().beginTransaction().remove(this).commit();

to

getActivity().getFragmentManager().popBackStack();

И он может закрыть фрагмент.

Ответ 3

Для тех, кому нужно найти простой способ

Попробуйте getActivity().onBackPressed();

Ответ 4

Попробуйте следующее:

ft.addToBackStack(null);   // ft is FragmentTransaction

Итак, когда вы нажимаете back-key, текущая активность (которая содержит несколько фрагментов) будет загружать предыдущий фрагмент, а не заканчиваться.

Ответ 5

Это способ Kotlin, я создал кнопку в макете фрагмента, а затем установил onClickListner в onViewCreated.

согласно комментарию Вишванатха-Лекшманана

override fun onViewCreated(view: View?, savedInstanceState: Bundle?) 
{
     super.onViewCreated(view, savedInstanceState)

     btn_FragSP_back.setOnClickListener {
        activity?.onBackPressed()
    }
}

Ответ 6

Попробуй это:

public void removeFragment(Fragment fragment){
    android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
    android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

    fragmentTransaction.remove(fragment);
    fragmentTransaction.commit();
}

Ответ 7

getActivity().onBackPressed делает все, что вам нужно. Он автоматически вызывает метод onBackPressed в родительской активности.

Ответ 8

Button ok= view.findViewById(R.id.btSettingOK);
Fragment me=this;
ok.setOnClickListener( new View.OnClickListener(){
    public void onClick(View v){
     getActivity().getFragmentManager().beginTransaction().remove(me).commit();
    }
});

Ответ 9

Вы можете попробовать эту логику, потому что она работает для меня.

frag_profile profile_fragment = new frag_profile();

boolean flag = false;
@SuppressLint("ResourceType")
public void profile_Frag(){
    if (flag == false) {
        FragmentManager manager = getFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();
        manager.getBackStackEntryCount();
        transaction.setCustomAnimations(R.anim.transition_anim0, R.anim.transition_anim1);
        transaction.replace(R.id.parentPanel, profile_fragment, "FirstFragment");
        transaction.commit();
        flag = true;
    }

}

@Override
public void onBackPressed() {
    if (flag == true) {
        FragmentManager manager = getFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();
        manager.getBackStackEntryCount();
        transaction.remove(profile_fragment);
        transaction.commit();
        flag = false;
    }
    else super.onBackPressed();
}

Ответ 10

Если вам нужно обработать действие более конкретно с помощью кнопки "Назад", вы можете использовать следующий метод:

view.setFocusableInTouchMode(true);
view.requestFocus();
view.setOnKeyListener(new View.OnKeyListener() {
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if( keyCode == KeyEvent.KEYCODE_BACK )
        {
            onCloseFragment();
            return true;
        } else {
            return false;
        }
    }
});

Ответ 12

Попробуй это

getActivity().finish();