web-dev-qa-db-ja.com

フラグメントのgetPackageName()

この方法を使用して、Googleマップのアクティビティでマーカーのサイズを変更していました。

public Bitmap resizeMapIcons(String iconName,int width, int height){
    Bitmap imageBitmap = BitmapFactory.decodeResource(getResources(),getResources().getIdentifier(iconName, "drawable", getPackageName()));
    Bitmap resizedBitmap = Bitmap.createScaledBitmap(imageBitmap, width, height, false);
    return resizedBitmap;
}

MapViewでフラグメントで使用したかったのですが、「エラー:シンボルメソッドgetPackageName()が見つかりません」というエラーが表示されます。何が問題でしょうか?

10
Tamas Koos

GetPackageName()の代わりにこれを試してください

getActivity().getPackageName()

33
steve
getPackageName()

アクティビティで定義されています。 Fragmentで直接使用することはできません。使用してみてください:

    if(getActivity()!=null){
         Bitmap imageBitmap = BitmapFactory.decodeResource(getResources(),getResources().getIdentifier(iconName, "drawable", getActivity().getPackageName()));
         //rest of your code
   }

GetActivityがnullかどうかを確認することをお勧めします。したがって、アプリはクラッシュしません。これを読んでください SOの質問

メインアクティビティで静的変数を作成し、パッケージ名としてインスタンス化することもできます。次に、その変数をフラグメントで使用します。

    public static String PACKAGE_NAME;

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    PACKAGE_NAME = getApplicationContext().getPackageName();
}

これで、次の方法でアクセスできます。

MainActivity.PACKAGE_NAME
4
rafsanahmad007

これは、フラグメント内のKotlinのパッケージ名を取得するためのものです

context!!.packageName

3
Ade

BuildConfig.APPLICATION_ID


最も簡単な方法は、おそらく次のとおりです。

String PkgName = BuildConfig.APPLICATION_ID

ノート:

  • コードのどこからでもBuildConfigにアクセスできます。
  • ライブラリでは機能しません
2
Pedro Lobito

Fragment onCreateView()でPackageManagerを取得する別の方法

view.getContext().getPackageName()
0