Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's the difference between passing this vs. ClassName.this from an event handler when passed to Intent constructor?

In the earlier Android Programming Tutorial, page 192, we see an implementation of LunchList#onOptionsItemSelected. Within this implementation we see two Intents passed to startActivity: one whose constructor is passed LunchList.this, the other whose constructor is passed this.

What's the difference?

See lines 78 - 91 here. Note how onOptionsItemSelected is not declared within an inner class.

In Android/Java does the value of this change within the context of event handlers or function binding via reflection? Could both Intent instances be passed this?

like image 412
ybakos Avatar asked Sep 26 '12 03:09

ybakos


2 Answers

In Java, this refers to the containing class, and ClassName.this refers to the first containing class whose name is ClassName. Event handlers are typically written as anonymous, inner classes, so if you want to refer to the event handler's containing class (and not the event handler's class), you need to specify ContainingClass.this, not this.

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

like image 199
JimN Avatar answered Sep 28 '22 05:09

JimN


When you are creating an Intent inside an Inner Class use ClassName.this(here className must be the Activity class Name) and if creating Intent inside an Activity class you can use this.

like image 23
Nishant Avatar answered Sep 28 '22 05:09

Nishant