wake-up-neo.com

getPackageName () in Fragment

Ich habe diese Methode verwendet, um die Größe von Markierungen in einer Google Maps-Aktivität zu ändern:

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;
}

Jetzt wollte ich es in einem Fragment mit MapView verwenden, aber ich bekomme die Fehlermeldung "Fehler: Symbolmethode getPackageName () kann nicht gefunden werden". Was könnte das Problem sein?

6
Tamas Koos

Versuchen Sie dies anstelle von getPackageName ().

getActivity().getPackageName()

19
steve
getPackageName()

ist in Aktivität definiert. Sie können es nicht direkt in Ihrer Fragment verwenden. Versuchen Sie es mit:

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

Es wird empfohlen, zu überprüfen, ob getActivity null ist oder nicht. So stürzt Ihre App nicht ab.Lesen Sie diese SO Frage

Sie können auch eine statische Variable in Ihrer Hauptaktivität erstellen, die als Paketname instanziiert wird. Dann verwenden Sie einfach diese Variable in Fragment.

    public static String PACKAGE_NAME;

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

    PACKAGE_NAME = getApplicationContext().getPackageName();
}

Jetzt können Sie darauf zugreifen mit:

MainActivity.PACKAGE_NAME
3
rafsanahmad007

Hier erhalten Sie den Paketnamen für Kotlin in einem Fragment

context!!.packageName

1
Ade

BuildConfig.APPLICATION_ID


Der einfachste Weg ist wahrscheinlich:

String PkgName = BuildConfig.APPLICATION_ID

Anmerkungen:

  • Sie können von überall in Ihrem Code auf BuildConfig zugreifen.
  • Funktioniert nicht in Bibliotheken
0
Pedro Lobito

Eine andere Möglichkeit, PackageManager in Fragment onCreateView () zu erhalten

view.getContext().getPackageName()
0