首页 > 解决方案 > 当类中未使用静态关键字时,什么会生成“无法从静态上下文引用”?

问题描述

我收到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");
    }
}
.
.
.
}

但是,关键字“static”从未在任何地方的类中使用。

我正在关注使用getSupportFragmentManager()的 API 。我曾使用getFragmentManager但被告知android.app.Fragmentdeprecated 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 的指令并得到一个我不理解的错误。不使用“静态”关键字时会产生什么错误?

标签: androidstaticandroidxnon-static

解决方案


getSupportFragmentManager()您在类 ( ) 上调用实例方法 ( FragmentActivity),而不是在实例上。“静态上下文”是FragmentActivity.

FragmentManager为您获取一个,请Fragment尝试getParentFragmentManager()

FragmentManager fm = getParentFragmentManager();

如果这似乎不存在,那么您使用的是旧版本的 AndroidX 库,在该方法存在之前。在这种情况下,使用getFragmentManager()

FragmentManager fm = getFragmentManager();

推荐阅读