Si tratta di un frammento di codice dal mio progetto che sto usando per imparare Android:Una classe DialogFragment interna può essere statica o no?
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();
}
}
Come potete vedere Devo aggiungere @SuppressLint
a fare il mio lavoro, ma app sul guide questa annotazione non era necessario.
Cosa sto sbagliando?
qui sono i miei importazioni:
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;
Grazie, ma l'aggiunta di modificatore static per EnableGpsDialogFragment mi sta costringendo per aggiungere modificatore static per enableLocationSettings private void(). E se aggiungo appare un nuovo errore: Non può fare un riferimento statico al metodo startActivity non statico (Intent) dal tipo di attività – szpic
ben @szpic che è perché il vostro ** ** di modifica alla tua domanda ora include una chiamata a ' enableLocationSettings(); ' –
Per aggirare questo problema, è possibile utilizzare un riferimento debole a qualsiasi cosa sia necessaria dall'attività. Quindi, prima dell'uso, verificare che sia ancora valido. Questo dovrebbe essere impostato ogni volta che l'attività viene distrutta/creata per assicurarsi che sia valida. Per aggiungere informazioni sui frammenti statici: possono perdere memoria in questo contesto se non vengono creati staticamente, poiché è possibile che mantengano un riferimento e un'attività obsoleta che non è più accessibile e che dovrebbe essere stata raccolta. –