1. ホーム
  2. java

[解決済み] 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を利用できないため、取得することができません。

外部で静的な参照を作成し、内部でそれを使用することができましたが、それは正しいですか?常にそうしなければならないのはおかしいように思えますが?

どのように解決するのですか?

置き換え thisMyActivity.this ここで、MyActivityはActivityのサブクラスのクラス名です。

説明 コードのこの部分を使用すると、匿名の内部クラスを作成していることになります。

new OnClickListener() {

匿名インナークラスは、作成されたクラスのインスタンスへの参照を持ちます。findViewByIdはActivityのメソッドなので、Activityのサブクラス内で作成しているように見えます。Activityの方はContextなので、自動的に持っている参照を利用すればいいだけです。