[解決済み] OnClickListenerの内部で、いろいろなものにアクセスできないのですが、どうしたらいいですか?
2023-07-08 08:41:48
質問
OnClickListenerの内部で、以下のようにスコープの外からほとんどの変数にアクセスできません。
findViewById(R.id.Button01).setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Intent mainApps = new Intent(Intent.ACTION_MAIN);
mainApps.addCategory(Intent.CATEGORY_LAUNCHER);
List<ActivityInfo> activities = this.getPackageManager().queryIntentActivities(mainApps, 0);
/*
Intent intent = new Intent("com.sygic.drive/com.sygic/drive/.SygicDriveActivity");
startActivity(intent);*/
}
});
この例では、PacketManagerを取得する必要がありますが、OnClickListenerの内部でContextを利用できないため、取得することができません。
外部で静的な参照を作成し、内部でそれを使用することができましたが、それは正しいですか?常にそうしなければならないのはおかしいように思えますが?
どのように解決するのですか?
置き換え
this
を
MyActivity.this
ここで、MyActivityはActivityのサブクラスのクラス名です。
説明 コードのこの部分を使用すると、匿名の内部クラスを作成していることになります。
new OnClickListener() {
匿名インナークラスは、作成されたクラスのインスタンスへの参照を持ちます。findViewByIdはActivityのメソッドなので、Activityのサブクラス内で作成しているように見えます。Activityの方はContextなので、自動的に持っている参照を利用すればいいだけです。
関連
-
Eclipseは、ポップアップA Java Exception has occurred.を実行し、エラーException in threadの解決策を報告します。
-
NullPointerException - java.lang.
-
アクセス制限です。タイプ 'JPEGCodec' は API ではない ☞My Blog Github ☜ ホームページを見る
-
javaの非静的メソッドを静的に参照することができない
-
ApplicationContextの起動エラーです。条件レポートを表示するには、アプリケーションを'de'で再実行します。
-
ajax コミット リソースの読み込みに失敗しました: サーバーはステータス 400 で応答しました ()
-
java send https request prompt java.security.cert.について。
-
X11 DISPLAY変数が設定されていない」問題の解決方法
-
Server Tomcat v9.0 Server at localhost の起動に失敗しました。
-
代入の左辺は変数でなければならない 解答
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
mvn' は、内部または外部のコマンド、操作可能なプログラムまたはバッチファイルとして認識されません。
-
アクセス制限です。タイプ 'JPEGCodec' は API ではない ☞My Blog Github ☜ ホームページを見る
-
Collections.sortがdoubleでソートできない問題を完璧に解決する。
-
プロジェクトの依存関係を解決できない。
-
が 'X-Frame-Options' を 'sameorigin' に設定したため、フレーム内に存在する。
-
無効なメソッド宣言
-
セミコロン期待値エラー解決
-
ジャバアレイ
-
XXX型を囲むインスタンスがJavaでアクセスできない
-
Javaがリソースリークに遭遇した:'input'が閉じない 解決方法