[解決済み] Android: なぜ、getBaseContext() を使わなければならないのか?
質問
this
は、しばしば現在のコンテキストを参照するために使用されます。しかし、ある場合、なぜ私たちは
getBaseContext()
の代わりに
this
. (これは
this
というエラーが発生します。)
以下は私の例です。
Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?>arg0, View arg1, int arg2, long arg3){
Toast.makeText(getBaseContext(),"SELECTED", Toast.LENGTH_SHORT).show(); //this line
}
上記のコードで
getBaseContext()
を
this
はエラーになります。
どなたか解説をお願いします。
どのように解決するのですか?
-
getApplicationContext ()
は、アプリケーションのライフサイクル全体のアプリケーションコンテキストを返し、アプリケーションが破壊されると、それも破壊されます。 -
this
コンテキストはアクティビティの現在のコンテキストを返し、アクティビティに属し、アクティビティが破壊されると、それも破壊されます。Spinner
インスタンスの中で使用しているためonItemSelected(AdapterView<?>arg0, View arg1, int arg2, long arg3)
メソッドから派生したものです。Spinner
クラスとSpinner
からこのメソッドを継承しています。AdapterView.OnItemSelectedListener
インターフェース -
getBaseContext()
のメソッドです。ContextWrapper
. そしてContextWrapper
は、"。 Contextのプロキシ実装で、その呼び出しをすべて別のContextに単純に委譲する。サブクラス化することで、元のContextを変更することなく挙動を変更することができる。 javadocsによる)・・・。
そして、あなたの場合は:
Spinner
のサブクラスではありません。
Context
または
ContextWrapper
クラス
Toast.makeText(getBaseContext(),"SELECTED", Toast.LENGTH_SHORT).show();
というのは
getBaseContext()
のメソッドです。
ContextWrapper
と
ContextWrapper
のプロキシ実装です。
Context
ということで、間接的にContext Classオブジェクトを渡していることになります。
または、'Activity.this' を渡すこともできます。
Activity
クラスは
ContextWrapper
クラスです。
であれば
アンドロイド ドキュメント
の場合、このメソッドは Context クラスオブジェクトを必要とします。
public static Toast makeText (Context context, int resId, int duration)
そのため、アクティビティやクラスのコンテキストを渡すことはできません。
this
から
Toast.makeText
のどちらかのサブクラスを持たないものです。
Context
または
ContextWrapper
クラスがあります。
関連
-
[解決済み】「ArrayAdapterはリソースIDがTextViewであることが必要」XMLの問題点
-
[解決済み] カスタムアダプタからnotifyDataSetChangeが機能しない
-
[解決済み] 現在のテーマでスタイル 'coordinatorLayoutStyle' を見つけることができませんでした。
-
[解決済み】onCreateOptionsMenu(Menu メニュー)とは何ですか?)
-
[解決済み】プロガードを有効にすると、タスク ':app:crashlyticsStoreDeobsDebug' の依存関係を判断できない。
-
[解決済み】起動アクティビティを特定できませんでした。デフォルトのアクティビティが見つかりませんでした
-
[解決済み】SDKの場所がandroid studioで見つからない。
-
[解決済み】'dependencies' を '(groovy.lang.Closure)' に適用できない。)
-
[解決済み] getContext() , getApplicationContext() , getBaseContext() と "this" との相違点
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】パッケージ名(Google Analytics)に一致するクライアントが見つからない - 複数のproductFlavorsとbuildTypes
-
[解決済み】AndroidのSSL接続でトラストアンカーが見つからない
-
[解決済み】シンボル 'AppCompatActivity' を解決できない。
-
[解決済み】Android Studio。Android.support.design.widget.FloatingActionButton クラスを膨らませるのにエラーが発生する。
-
[解決済み】IllegalStateException: ViewPager で onSaveInstanceState の後にこのアクションを実行できません。
-
[解決済み] エラー - Android リソースのリンクに失敗しました (AAPT2 27.0.3 Daemon #0)
-
[解決済み] Android Fragment no view found for ID?
-
[解決済み] com.android.supportのライブラリは全て全く同じバージョン表記である必要があります。
-
[解決済み] Android Contextを取得するための様々な方法の違いは何ですか?
-
[解決済み】匿名内部クラスから外部クラスのキーワード【重複あり