Создается экземпляр ShowActivities
, когда я нажимаю кнопку. В первый раз, когда я нажимаю, все работает нормально. Это то, что я получаю в logCat:getActivity() возвращает null - второй раз, когда я открываю фрагмент
11-16 23:41:12.560 25874-25874/name.company.newapp E/onCreate: getActivity() == null: false
11-16 23:41:12.560 25874-25874/name.company.newapp E/onCreate: Hash: 1036405628
11-16 23:41:12.570 25874-25874/name.company.newapp E/onCreateView: getActivity() == null: false
11-16 23:41:12.570 25874-25874/name.company.newapp E/onCreateView: Hash: 1036405628
11-16 23:41:12.630 25874-25874/name.company.newapp E/onConnected: getActivity() == null: false
11-16 23:41:12.630 25874-25874/name.company.newapp E/onConnected: Hash: 1036405628
Все работает нормально. Я нажимаю кнопку назад и возвращаюсь к предыдущему фрагменту. И теперь я снова нажмите кнопку, чтобы открыть ShowActivities
фрагмент и что теперь LogCat возвратов:
11-16 23:41:13.890 25874-25874/name.company.newapp E/onCreate: getActivity() == null: false
11-16 23:41:13.890 25874-25874/name.company.newapp E/onCreate: Hash: 252302789
11-16 23:41:13.890 25874-25874/name.company.newapp E/onCreateView: getActivity() == null: false
11-16 23:41:13.890 25874-25874/name.company.newapp E/onCreateView: Hash: 252302789
11-16 23:41:13.900 25874-25874/name.company.newapp E/onConnected: getActivity() == null: true
11-16 23:41:13.900 25874-25874/name.company.newapp E/onConnected: Hash: 1036405628
onConnected
называется на одном фрагменте, хотя OnCreate создает другой.
ShowActivities фрагмент
public class ShowActivities extends Fragment implements
GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener {
public ShowActivities() {
}
private static GoogleApiClient googleClient;
private Location mLastLocation;
private PendingResult<LocationSettingsResult> result;
private LocationRequest locationRequest;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e("onCreate"," "+(getActivity() == null));
if (googleClient==null) {
googleClient = new GoogleApiClient.Builder(getActivity())
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
Log.e("onCreateView"," "+(getActivity() == null));
// Defines the xml file for the fragment
View view = inflater.inflate(R.layout.upload_activity_fragment, container, false);
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
}
@Override
public void onConnected(Bundle bundle) {
Log.e("onConnected"," "+(getActivity() == null));
locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
.addLocationRequest(locationRequest);
builder.setAlwaysShow(true);
result = LocationServices.SettingsApi.checkLocationSettings(googleClient, builder.build());
if (result != null) {
result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
@Override
public void onResult(LocationSettingsResult locationSettingsResult) {
final Status status = locationSettingsResult.getStatus();
switch (status.getStatusCode()) {
case LocationSettingsStatusCodes.SUCCESS:
// All location settings are satisfied. The client can initialize location
// requests here.
break;
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
// Location settings are not satisfied. But could be fixed by showing the user
// a optionsDialog.
try {
// Show the optionsDialog by calling startResolutionForResult(),
// and check the result in onActivityResult().
if (status.hasResolution()) {
status.startResolutionForResult(getActivity(), 1000);
Log.e("location", "Resolution");
}
} catch (IntentSender.SendIntentException e) {
// Ignore the error.
Log.e("location", "Resolution2");
}
break;
case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
// Location settings are not satisfied. However, we have no way to fix the
// settings so we won't show the optionsDialog.
break;
}
}
});
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if ((resultCode == Activity.RESULT_OK) && (requestCode == 1000)) {
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(googleClient);
}
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
}
@Override
public void onLocationChanged(Location location) {
Log.e("location", "finally");
}
@Override
public void onResume() {
super.onResume();
}
@Override
public void onPause() {
super.onPause();
if (googleClient!=null) {
googleClient = null;
}
}
}
Эта задача была решена. Я изменил onPause, чтобы сделать googleClient null после выхода из фрагмента.
Почему вы не инициализируете фрагмент перед выполнением транзакции? – Coeus
Я не думаю, что в этом проблема –
- это 'FragmentActivities'' Fragment' или 'Activity'? – petey