unregisterReceiever IllegalArgumentException onDestroy при открытии фрагмента 2x - PullRequest
0 голосов
/ 27 марта 2020

Я использую фрагменты с видом снизу навигации. У меня есть несколько фрагментов, которые используют одну и ту же структуру, однако этот фрагмент вызывает кр sh, и я не могу понять, почему. Я пытался использовать логическое значение для предотвращения взлома sh, и я пробовал различные комбинации, касающиеся android жизненного цикла, такие как регистрация / отмена регистрации при запуске / остановке или onResume / onPause, onCreateView / onDestroyView.

Все работает правильно, если фрагмент не открывается ДВАЖДЫ из нижнего меню навигации. Поэтому, если вы нажмете кнопку, чтобы открыть фрагмент, затем нажмите кнопку навигации, чтобы снова открыть фрагмент, а затем попытаться закрыть приложение или перейти к другому фрагменту, и я получу эту ошибку. Я думаю, возможно, ошибка в том, что когда фрагмент открывается снова, он вызывает все функции жизненного цикла, я думаю, что получатель незарегистрирован во второй раз, когда открывается фрагмент, а затем пытается снова отменить регистрацию получателя, когда фрагмент закрыто. Есть ли способ проверить, зарегистрирован ли получатель, прежде чем пытаться отменить регистрацию получателя? Я пытался найти много решений, найденных на этих форумах, и я не могу избавиться от этого cra sh.

public class Freelance_Fragment extends Fragment{

    static Freelance_Receiver receiver;
    static IntentFilter intentFilter;

    String TAG = "Freelance_Fragment";

    public View onCreateView(@NonNull LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {
        String tFunct = "onCreateView";
        Log.v(TAG, tFunct);

        this.receiver = new Freelance_Receiver();
        this.intentFilter = new IntentFilter();
        return null;
    }

    @Override
    public void onResume() {
        super.onResume();
        String tFunct = "onResume";
        Log.v(TAG, tFunct);

        getActivity().registerReceiver(receiver, intentFilter);
    }

    @Override
    public void onPause() {
        super.onPause();
        String tFunct = "onPause";
        Log.v(TAG, tFunct);

        getActivity().unregisterReceiver(receiver);
    }

}

Это ошибка

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.technomicron.qc, PID: 7611
java.lang.IllegalArgumentException: Receiver not registered: com.technomicron.qc.ui.freelance.Freelance_Receiver@a256218
    at android.app.LoadedApk.forgetReceiverDispatcher(LoadedApk.java:1054)
    at android.app.ContextImpl.unregisterReceiver(ContextImpl.java:1376)
    at android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:668)
    at com.technomicron.qc.ui.freelance.Freelance_Fragment.onPause(Freelance_Fragment.java:67)
    at androidx.fragment.app.Fragment.performPause(Fragment.java:2782)
    at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:933)
    at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)
    at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1310)
    at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1884)
    at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1830)
    at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1727)
    at androidx.fragment.app.FragmentManagerImpl$2.run(FragmentManagerImpl.java:150)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6776)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...