Cannot refer to a non-final variable inside an inner class defined in a different met

A

akkulader

Ambitioniertes Mitglied
0
Moin!
Ich hab n Problem:unsure:


Ich befinde mich in einem OnItemClickListener einer ListView:

Er bekommt die ListView und kann dann das in ihr gespeicherte Objekt ansprechen.

OnItemClickListener itemClickListener = new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View container, int position, long id) {


Spiel akSpiel = (Spiel) list.getItemAtPosition(position);


Das Objekt Spiel enthält u.a. das Attribut torA.

Um das zu bearbeiten öffne ich im OnItemCLickListener ein Dialog, in dem ich die Torzahl verändern kann:
final Dialog dialog = new Dialog(Spieltag.this , android.R.style.Theme_Translucent_NoTitleBar);


dialog.setContentView(R.layout.dialog);
dialog.show();

Am Ende möchte ich in diesem Dialog einen Button drücken, der das Attribut torA im originalen Objekt verändern/speichern kann.

Button sende = (Button) dialog.findViewById(R.id.sendeButton);
sende.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
akSpiel.setTorA(tempTorA);
dialog.dismiss();

}
});


Das alles findet im OnItemClickListener statt.
Jetzt gibt er mir aber die obige Fehlermeldung aus.
Wie kann ich das umgehen? Bin leider Ratlos :(

Wäre sehr dankbar, falls mir jemand helfen könnte!
 
Hallo,
wie siehts aus wenn du den Dialog außerhalb des ClickListeners initialisierst? (wäre jedenfalls meine erste Idee was Probleme verursachen kann)
 
du deklarierst akSpiel und versuchst dann, aus einer Inner Class auf diese Variable zuzugreifen. Das ist nicht erlaubt, weil die Inner Class nicht wissen kann, ob die Variable ausserhalb überhaupt noch existiert oder ob sie bereits gelöscht wurde. Die einfachste Lösung wäre es, akSpiel einfach als final zu deklarieren.

Code:
final Spiel akSpiel = (Spiel) list.getItemAtPosition(position);

Die sauberste Lösung wäre vermutlich, wenn der Dialog-Listener eine eigene Referenz auf akSpiel hätte. Dann wäre es egal, wenn die äussere Klasse etwas an ihrer Referenz ändert.
 

Ähnliche Themen

FabianDev
Antworten
5
Aufrufe
561
swa00
swa00
Horstmann365
Antworten
1
Aufrufe
1.060
jogimuc
J
D
Antworten
23
Aufrufe
2.558
Data2006
D
Zurück
Oben Unten