Android Finale Variable ändert sich NIE?

G

Guest1993

Gast
Hallo,

ich brauche dringend Hilfe!

Ich habe folgenden Code (Ausschnitt):
Java:
private void method(int x){
    	Log.i("X", "X " + x);
    	final int pX = x;
    	Log.i("X", "PX " + pX);
    	if(d[x] == null){
    		AlertDialog.Builder builder = new AlertDialog.Builder(this);
    		builder.setTitle("Select");
    		builder.setItems(new String[]{"Option 1"}, new DialogInterface.OnClickListener() {
			public void onClick(DialogInterface dialog, int which){
				Log.i("X", "XC2 " + pX);
				if(which == 0){
					d[pX] = new D1();
					Log.i("New", "Inserted D1 into " + pX);
					update();
					arrayAdapter.notifyDataSetChanged();
				}
			}
		});
	}
}

Die Variable pX scheint sich NIE zu ändern. Im Array wird immer der gleiche Index bearbeitet! Woran liegt das?

Aus den Logs sehe ich, dass XC2 immer gleich ist, PX und X ändern sich jedoch.

Vielen Dank im Voraus für alle Tips!

PS: Ich kann leider nicht den gesamten Code posten.
 
S

SlaterB

Gast
deine Frage ist recht unklar formuliert, und der Code ist auch fragwürdig,
was soll denn genau alles passieren, wie oft wird die Methode mit welchen Werten für x aufgerufen,
wie oft kommt der Listener dran, was ist das Idealziel?

die Konstellation bisher läßt manche Vermutungen zu,
kommt 3x methode(14) dran, wird 3x ein Listener geadded,
ok wohl jedesmal für einen neuen separaten AlertDialog, dann vielleicht nicht so schlimm,
jedenfalls bleib d[x] evtl. null, solange der Listener nicht ausgeführt wird, was ja nicht direkt passiert sondern vom Dialog abhängt,

du überlegst ob sich pX ändert, dazu muss sich ja mindestens erstmal x ändern, oder?
wird z.B. auch methode(15) aufgerufen?
meiner Ansicht nach gibt das dann wieder einen eigenen Dialog mit entsprechenden Listener,
oder funktioniert etwas nicht?

vom ersten bzw. einem früheren Listener, der sich auf das damalige pX 14 bezieht kannst du nicht unbedingt erwarten,
dass der jetzt was zu 15 macht, nur weil zwischendurch methode(15) aufgerufen wurde,
verständlich oder zielt deine Frage in diese Richtung?
wie du siehst ist für jederman (oder einfach nur für mich) absolut unklar was du wissen willst/ was dein Programm macht

aber ein Punkt noch weiter geraten:
statt eines finalen ints könntest du ein finales int-Array der Länge 1 verwenden und x darin speichern, der Array-Inhalt wäre veränderbar,
falls lokale finale Variable, dann aber nur innerhalb des einen Ablaufs der Methode bzw. allen Ausführungen des Listenern,

wenn ein späterer Aufruf methode(15) noch was bewirken soll, dann könnte das Array bzw. wiederum der int an sich
Instanzattribut sein, das muss nicht final sein, der Listener kann auch mit veränderlichen Attributen arbeiten
 
G

Guest1993

Gast
Danke für die schnelle Antwort!

Zur Erklärung:
Der AlertDialog wird bei jedem Aufruf überschrieben. Die Listener dürften somit kein Problem sein. Die Methode wird aufgerufen, um in einer ListView leere Felder beim Anklicken mit einem wählbaren Wert zu füllen. Der Parameter ändert sich, je nachdem, welches Feld angeklickt worden ist. update und arrayAdapter.notifyDataSetChanged aktualisieren die Darstellung.

Der Trick mit dem Array funktioniert! Vielen Dank!
 
Zuletzt bearbeitet von einem Moderator:

Ähnliche Java Themen

Neue Themen


Oben