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



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



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



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



если я нажму кнопку назад на фрагменте-C , он вернется к фрагменту-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.



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



Итак, похоже, что текущий фрагмент не закрывается полностью.



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

746   11  

11 ответов:

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

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

изменить код getActivity().getFragmentManager().beginTransaction().remove(this).commit();

до

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

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

для тех, кому нужно выяснить, простой способ

попробовать getActivity().onBackPressed();

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

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

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

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

согласно комментарию @ Viswanath-Lekshmanan

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

     btn_FragSP_back.setOnClickListener {
        activity.onBackPressed()
    }
}

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

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

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

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

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

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

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

попробуйте это

getActivity().finish();

Comments

    Ничего не найдено.