В настоящее время я пишу проект для 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
}
}
Я был бы очень благодарен, если бы кто-нибудь мог мне объяснить, что именно вызывает исключение и как я делаю это правильно. Заранее спасибо.