Как удалить фрагмент из функции onPostExecute класса AsyncTask внутри класса Fragment - PullRequest
0 голосов
/ 05 июня 2018

У меня есть NagivationDrawer, когда пользователь нажимает определенный элемент, я изменяю фрагмент.

Итак, у меня есть что-то подобное

public class MyFragment  extends Fragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
          ......
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState){  
          ....... 
    }

    public class MyAsynchTack extends AsyncTask<Void, Void, Boolean> {  
          .
          .
          .
        @Override
        protected void onPostExecute(final Boolean success) {

            showProgress(false);

            if (success) {
                getActivity().getSupportFragmentManager().popBackStack();
            } else {
            String title = getString(R.string.serverErrTitle);
            String message = getString(R.string.serverErr);
            DialogBoxNetworkError dialog = new DialogBoxNetworkError();
            Bundle args = new Bundle();
            args.putString(DialogBoxNetworkError.ARG_TITLE, title);
            args.putString(DialogBoxNetworkError.ARG_MESSAGE, message);
            dialog.setArguments(args);
            dialog.show(getActivity().getFragmentManager(), "tag");
        }
    }         

    .
    .
    .
    .
}

Я использую это для удаления фрагмента науспех:

if (success) {
                getActivity().getSupportFragmentManager().popBackStack();
            } 

Но это не работает, я пробовал и другие решения, которые нашел.

Спасибо.

Отредактировано

вот как добавляется фрагмент из действия NavigationDrawer:

    public void addNewWh(View view) {
    SellerNewWhFragment fragment = null;
    fragment = new SellerNewWhFragment();
    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
    fragmentTransaction.replace(R.id.frame, fragment);
    fragmentTransaction.commit();
}

1 Ответ

0 голосов
/ 05 июня 2018

Вы пропустили вызов fragmentTransaction.addToBackStack(null);, так как документация гласит:

Добавьте эту транзакцию в задний стек.Это означает, что транзакция будет запомнена после того, как она будет зафиксирована, и обратится к своей операции, когда позднее извлечется из стека.

После этого вы сможете отменить эту транзакцию.

...