Я использую фрагменты с видом снизу навигации. У меня есть несколько фрагментов, которые используют одну и ту же структуру, однако этот фрагмент вызывает кр 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)