Как прикрепить фрагмент к контексту (программно)? - PullRequest
0 голосов
/ 30 октября 2018

В настоящее время я пишу проект для Android с использованием Android Studio 3.1.2 и SDK 19.

Когда я произвел рефакторинг почти всего своего кода и заменил множество getContext() вызовов на requireContext() и getActivity() на requireActivity(), я столкнулся с проблемой, что приложение вылетает уже при запуске программы запуска. Я знаю, что есть несколько постов, связанных с одной и той же проблемой получения IllegalStateException: Fragment myFragment not attached to a context, но все они очень специфичны для проекта, поэтому на самом деле это не показывает мне шаг, который я пропустил. Итак, я покажу вам свой пример кода и молюсь за милосердного программиста, который просветит меня, что я должен сделать, чтобы решить эту проблему просто подходящим способом.

Это мой SplashActivity (активность запуска):

public class SplashActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);

        Fragment fragmentToDisplay = null;
        if (!(getIntent().getBooleanExtra("isLaunch", true))) {
            fragmentToDisplay = new LoginFragment();
        } else {
            if (savedInstanceState == null) {
                fragmentToDisplay = new SplashFragment();
            }
        }
        if (fragmentToDisplay.isAdded()) {
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragmentToDisplay).commit();
        }
    }
}

Это SplashFragment, который загружается изначально:

public class SplashFragment extends RequestingFragment {

    private Handler delayHandler = new Handler();

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View fragmentView = inflater.inflate(R.layout.fragment_splash, container, false);
        requestQueue = Volley.newRequestQueue(this.requireContext());
        requestParams.add(SessionHandler.getAppInstanceID(this.getContext()));
        startRequest(RequestOperation.SESSION_CHECK);
        onSuccess(new JSONObject(), "");
        return fragmentView;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        delayHandler.removeCallbacksAndMessages(null);
    }

    @Override
    public void onSuccess(final JSONObject json, String parsingKey) {
        delayHandler.postDelayed(new Runnable() {
            @Override
            public void run() {
                //parsing stuff
            }    
        }, 2000);
    }

    @Override
    public void onError() {
        showErrorDialog();
    }

    private void showErrorDialog() {
        //show a horrifying dialog
    }
}

Я был бы очень благодарен, если бы кто-нибудь мог мне объяснить, что именно вызывает исключение и как я делаю это правильно. Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...