Что генерирует «нельзя ссылаться из контекста stati c», когда ключевое слово stati c не используется в классе? - PullRequest
0 голосов
/ 07 марта 2020

Я получаю ошибку Non-static method 'getSupportFragmentManager()' cannot be referenced from static context для следующего кода:

import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentActivity;
.
.
.
public class MedicalInformationFragment extends Fragment implements FragmentNameProvider, ConfirmDialogFragment.ConfirmDialogListener{
.
.
.
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d(TAG, "Entered: onCreate");
    first = true;
    if(getArguments() != null) {
        petId = getArguments().getInt(PET_ID_KEY);
        Log.d(TAG, "Pet ID is: " + petId);
        sMedicalInformationViewModel = ViewModelProviders.of(this).get(MedicalInformationViewModel.class);
        FragmentManager fm = FragmentActivity.getSupportFragmentManager();
        if(fm != null) {
            thisFragment = fm.findFragmentById(R.id.fragment_container);
            Log.d(TAG, "thisFragment is: " + thisFragment);
        }else{
            Log.d(TAG, "Error: fm == null");
        }
    }else{
        Log.d(TAG, "Error: getArguments() == null");
    }
}
.
.
.
}

Однако ключевое слово 'stati c' никогда и нигде в классе не используется.

I Я использую API для использования getSupportFragmentManager () . Я использовал getFragmentManager , но мне сказали, что android.app.Fragment был deprecated in API level 28.and to use the Support Library Fragment for consistent behavior across all devices and access to Lifecycle, но я обнаружил, что это package is part of the Android support library which is no longer maintained. The support library has been superseded by AndroidX which is part of Jetpack.

Итак, вот я, следуя указаниям директивы Android API и получение ошибки, которую я не понимаю. Что может вызвать эту ошибку, если ключевое слово 'stati c' не используется?

1 Ответ

2 голосов
/ 07 марта 2020

Вы вызываете метод экземпляра (getSupportFragmentManager()) для класса (FragmentActivity), а не для экземпляра. "Stati c context" - FragmentActivity.

Чтобы получить FragmentManager для вашего Fragment, попробуйте getParentFragmentManager():

FragmentManager fm = getParentFragmentManager();

Если это не кажется чтобы существовать, вы находитесь на более старой версии библиотек AndroidX, до того, как этот метод существовал. В этом случае используйте getFragmentManager():

FragmentManager fm = getFragmentManager();
...