Ich verwende ein Fragment, das verschiedene Informationen über ein Objekt anzeigt. Innerhalb onCreate des Fragments abrufen ich einige Werte aus dem Objekt und speichern sie in globalen Variablen:Der Wert der Variable ist anders als der zugewiesene
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
String serializedShow = getArguments().getString(SHOW_TO_LOAD);
mShow = (new Gson()).fromJson(serializedShow, Show.class);
mScope = mShow.getScope();
mLanguage = MainActivity.getSystemLanguage();
mLanguage = mLanguage.replace("_", "-");
mId = Integer.valueOf(mShow.getShowId()).toString(); //this line is important
Log.v(LOG_TAG, "DetailFragment onStart, Id is " + mId);
}
Wie man sehen kann ich auf diese Variable eine bestimmte ID zuweisen. Ich benutze das Protokoll, um zu überprüfen, ob der Wert von mId der richtige ist und es ist. Bis jetzt läuft alles gut. Weiter im Code kann der Benutzer auf eine Schaltfläche klicken, um die URL im Browser zu öffnen. Die URLs sind unterschiedlich bei jedem Zeitpunkt dieses Fragment erstellt wird (jedes Mal, zeigt dieses Fragment andere Sachen)
private void fetchIMDBId(){
Log.v(LOG_TAG, "starting IMDBAsyncTask with id " + mId);
new Async4().execute(mId);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_launch:
fetchIMDBId();
return true;
default:
break;
}
return false;
}
Wie Sie die Methode fetchIMDBId sehen können() wird aufgerufen. Ich habe eine Protokollzeile, um zu prüfen, ob der Wert von mId, der zuvor in onCreate gesetzt wurde, derselbe ist. Es ist nicht das gleiche, es ist ein ganz anderer Wert. Spezifisch ist die ID des Objekts, das in einer früheren Instanz dieses Fragments angezeigt wurde.
Bitte sagen Sie mir, was ich falsch mache. Vielen Dank.
E: variable Erklärung
public class DetailFragment extends Fragment {
private static final String LOG_TAG = DetailFragment.class.getSimpleName();
...
private String mScope, mLanguage, mId;
...
@Override
public void onCreate(Bundle savedInstanceState) {
...
}
E: vollständige Quelle here
Ist MId Klassenvariable oder Instanzvariable genannt wird? –
Was meinst du? Ich habe die Deklaration zum Hauptpost hinzugefügt – user11230
Gibt es irgendwelche Setter auf mId? Sind Sie sicher, dass die zwei Protokolle, die Sie prüfen, für die gleiche Instanz Ihrer Klasse sind? –