[英]Pass data from Activity to Fragment in another Activity
[英]Pass the context from a fragment inside an activity to another class
我有一個由Activity實例化的片段。 我遇到的問題是片段中有另一個類,該類將Activity上下文作為參數。
public class LocationQueries {
Activity context;
private static int REQUEST_CODE_RECOVER_PLAY_SERVICES = 200;
public LocationQueries(Activity context) {
this.context = context;
}
public boolean checkGooglePlayServices() {
int checkGooglePlayServices = GooglePlayServicesUtil
.isGooglePlayServicesAvailable(context);
if (checkGooglePlayServices != ConnectionResult.SUCCESS) {
/*
* google play services is missing or update is required
* return code could be
* SUCCESS,
* SERVICE_MISSING, SERVICE_VERSION_UPDATE_REQUIRED,
* SERVICE_DISABLED, SERVICE_INVALID.
*/
GooglePlayServicesUtil.getErrorDialog(checkGooglePlayServices,
context, REQUEST_CODE_RECOVER_PLAY_SERVICES).show();
return false;
}
return true;
}
}
我像這樣在我的片段中實例化該類
private LocationQueries locationQueries = new LocationQueries(getActivity());
但是當我嘗試使用locationQueries.checkGooglePlayServices();
我得到Caused by: java.lang.NullPointerException: Attempt to invoke virtual method android.content.pm.PackageManager android.content.Context.getPackageManager() on a null object reference
。 看起來LocationQueries(getActivity())
實際上沒有通過活動上下文。 我該如何解決?
編輯:如果我從活動-> LocationQueries(this);
執行相同的操作,則一切正常LocationQueries(this);
似乎您在錯誤的位置啟動了LocationQueries
。 實際上,我認為這是:
private LocationQueries locationQueries = new LocationQueries(getActivity());
在Fragment
類中被稱為全局變量。
相反,應將變量保留為全局變量,但將其設置為onCreate()
或onResume()
,如下所示:
private class Frag extends Fragment {
private LocationQueries locationQueries;
...
@Override
public void onCreate(Bundle inState) {
locationQueries = new LocationQueries(getActivity());
}
}
您的片段似乎未附加到活動。
我懷疑您在調用onAttach(Activity activity)之前,或在您的Fragment上調用onDetach()之后,實例化了LocationQueries對象。
在這種情況下,調用getActivity()將返回null,這是您隨后傳遞給LocationQueries對象的結果,從而導致NPE。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.