2012-09-26 6 views
7

We wcześniejszym samouczku programowania Android na stronie 192 widzimy implementację LunchList#onOptionsItemSelected. W ramach tej implementacji widzimy dwa Intent s przekazane do startActivity: jeden, którego konstruktor jest przekazywany LunchList.this, drugi którego konstruktor jest przekazywany this.Jaka jest różnica między przekazaniem tej wartości do ClassName.this z procedury obsługi zdarzenia po przekazaniu do konstruktora Intent?

Jaka jest różnica?

See lines 78 - 91 here. Zwróć uwagę, że onOptionsItemSelected nie jest zadeklarowany w wewnętrznej klasie.

W systemie Android/Java wartość this zmienia się w kontekście procedur obsługi zdarzeń lub powiązania funkcji za pośrednictwem odbicia? Czy oba wystąpienia mogą zostać przekazane this?

Odpowiedz

10

W języku Java this odnosi się do klasy zawierającej, a ClassName.this odnosi się do pierwszej klasy zawierającej nazwę ClassName. Procedury obsługi zdarzeń są zazwyczaj zapisywane jako anonimowe, wewnętrzne klasy, więc jeśli chcesz odwoływać się do klasy zawierającej procedurę obsługi zdarzeń (a nie do klasy procedury obsługi zdarzenia), musisz określić ContainingClass.this, a nie this.

referencyjny: http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.8.4

+0

Dodałem link do źródła, o którym mowa. Zauważ, że 'onOptionsItemSelected' nie jest zadeklarowany wewnątrz klasy wewnętrznej. – ybakos

+1

W takim przypadku nazwa klasy jest zbędna/nadmiarowa. – JimN

2

Kiedy tworzysz Intent wewnątrz Inner Class użytku ClassName.this (tutaj className musi być aktywność nazwa klasy), a jeśli tworzenia Intent wewnątrz klasy Activity można wykorzystać this.

+0

Dodałem link do źródła, o którym mowa. Zauważ, że 'onOptionsItemSelected' nie jest zadeklarowany wewnątrz wewnętrznej klasy – ybakos

+0

Możesz również użyć' this' zamiast 'LunchList.this'. – Nishant

+0

Czy w tym przypadku nie ma różnicy? – ybakos

1

W tym przykładzie będzie to żadnej różnicy jak w albo uzależnić klasy, która rozpocznie działalność pozostanie taka sama. Pierwszy parametr intencji odnosi się do kontekstu klasy, z której rozpocznie się działanie i skąd zostaną przekazane dane pakietu.

Powiązane problemy