我收到以下代码的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");
}
}
.
.
.
}
但是,关键字“静态”从未在该类中的任何地方使用。
我正在使用getSupportFragmentManager()的API。我曾经使用过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的指令,并得到一个我不理解的错误。如果不使用'static'关键字,会产生什么错误?
您正在类(getSupportFragmentManager()
)上而不是实例上调用实例方法(FragmentActivity
)。 “静态上下文”为FragmentActivity
。
要获得FragmentManager
的Fragment
,请尝试getParentFragmentManager()
:
FragmentManager fm = getParentFragmentManager();
如果该方法似乎不存在,则说明您使用的是AndroidX库的旧版本,而该方法尚未存在。在这种情况下,请使用getFragmentManager()
:
FragmentManager fm = getFragmentManager();