2012-02-10 12 views
15

Aby rozpocząć działalność trzeba zamiarem, jak:Korzystanie z kontekstu, aby rozpocząć inną działalność

Intent i = new Intent(context, class) 

So wypełnić parametru context, kilka opcji dostępne są:

  • Wykorzystanie MyActivity.this lub po prostu this
  • Zastosowanie getApplicationContext()
  • Zastosowanie getBaseContext()

I jestem pewien, że istnieje jeszcze jedna lub dwie opcje. Te opcje pojawiają się w samouczku, jeden używa pierwszego, drugi używa trzeciej opcji.

Więc którego z nich użyć? Czy to ma znaczenie? Czy jest inaczej w różnych przypadkach?

Odpowiedz

14

Tak, różni się w różnych przypadkach,

To zależy od zakresu. Załóżmy, że jeśli tworzysz metodę w klasie globalnej, aby utworzyć extendsApplication, aby utworzyć Toast, która jest używana w każdej klasie Twojego Application, możesz użyć jej do stworzenia getApplicationContext().

Jeśli chcesz utworzyć widok, który jest ograniczony do konkretnej działalności można użyć Activity.this

Także jeśli chcesz stworzyć AlertDialog w jakimś wewnętrznym klasy powiedzieć AsyncTask, następnie trzeba użyć Activity.this, ponieważ AlertDialog należy połączyć z samym numerem Activity.

Również nie używaj getBaseContext() po prostu użyj Context, które masz. Aby uzyskać więcej informacji na ten sam temat, można zobaczyć this Answer.

Odpowiedź na pytanie brzmi: lepiej użyć Activity.this, aby rozpocząć nową Activity.

Intent intent = new Intent(Current_Activity.this, Calling.class); 
startActivity(intent); 
-1

Robisz to tak ....

Intent intent = new Intent(); 
intent.setClass(MainActivity.this, SecondActivity.class); 
startActivity(intent); 
+0

myślę OP wie, że SmartLemon :) –

+0

Proszę przeczytać cały pytanie przed udzieleniem odpowiedzi, a nie tylko kilka pierwszych słów (?) :) – nhaarman

+0

Czytałem całość, pytanie odpowiedział, należy użyć aktywny .this jak pokazano powyżej. – FabianCook

4

Różnią się one na pewno. Są to różne konteksty i powinny być używane z możliwie najmniejszym zakresem (kontekstem).

Na przykład, jeśli możemy użyć kontekstu działania zamiast kontekstu aplikacji, należy użyć kontekstu działania, to samo dotyczy kontekstu aplikacji i kontekstu podstawowego.

+1

To prawda, ale nie dla 'getBaseContext'. 'getBaseContext' jest metodą klasy" ContextWrapper ". Programista nie może jednoznacznie określić, który kontekst został z nim opakowany. – Olegas

+0

Ma to sens, ale jestem ciekawy "dlaczego" tej maksymy. Czy istnieje funkcjonalna różnica między rozpoczęciem działania z innego kontekstu działania lub aplikacji? –

Powiązane problemy