Ceci est un extrait de code de mon projet que je me sers pour apprendre Android:Une classe DialogFragment interne doit-elle être statique ou non?
private void enableLocationSettings() {
Intent settingsIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(settingsIntent);
}
@SuppressLint("ValidFragment")
public class EnableGpsDialogFragment extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(getActivity())
.setTitle("Tytuł")
.setMessage("wiadomosc")
.setPositiveButton("odpal", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
enableLocationSettings();
}
})
.create();
}
}
Comme vous pouvez le voir, je dois ajouter @SuppressLint
pour faire mon travail d'application, mais sur la guide cette annotation était pas nécessaire.
Qu'est-ce que je fais mal?
Voici mes importations:
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.Settings;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.DialogFragment;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
import android.widget.ToggleButton;
Merci, mais l'ajout de modificateur statique à EnableGpsDialogFragment me force à ajouter un modificateur static à la variable privée enableLocationSettings(). Et si je l'ajoute une nouvelle erreur apparaît: Impossible de faire une référence statique à la méthode non-statique startActivity (Intent) du type Activité – szpic
@szpic bien parce que votre ** edit ** à votre question inclut maintenant un appel à ' enableLocationSettings(); ' –
Pour contourner cela, vous pouvez utiliser une référence faible à tout ce qui est nécessaire à partir de l'activité. Ensuite, avant de l'utiliser, vérifiez qu'il est toujours valide. Cela doit être défini chaque fois que l'activité est détruite/créée pour s'assurer qu'elle est valide. Pour ajouter à propos des fragments statiques: Ils peuvent fuir la mémoire dans ce contexte s'ils ne sont pas créés statiquement car il est possible pour eux de conserver une référence et une ancienne activité qui n'est plus accessible autrement et qui aurait dû être récupérée. –