Android Fragments 片段中的getPackageName()

67up9zun  于 2023-02-04  发布在  Android
关注(0)|答案(7)|浏览(170)

我在Google Maps Activity中使用这个方法来调整标记的大小:

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的片段中使用它,但是我得到错误“error:找不到符号方法getPackageName()""。可能是什么问题?

e3bfsja2

e3bfsja21#

尝试使用此方法,而不是getPackageName()

getActivity().getPackageName()
watbbzwu

watbbzwu2#

下面是获取片段中Kotlin的包名称
context!!.packageName

muk1a3rh

muk1a3rh3#

一个月

最简单的方法可能是:

String PkgName = BuildConfig.APPLICATION_ID

注:

  • 您可以从代码的任何位置访问BuildConfig
  • 不适用于库
w3nuxt5m

w3nuxt5m4#

getPackageName()

已在Activity中定义。您不能在Fragment中直接使用它。请尝试用途:

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

最佳做法是检查getActivity是否为null,这样您的应用就不会崩溃。阅读本文SO question
您也可以在主Activity中创建一个静态变量,示例化为包名,然后在片段中使用该变量。

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
hts6caw3

hts6caw35#

Fragment onCreateView()中获取软件包管理器的另一种方法

view.getContext().getPackageName()
6yoyoihd

6yoyoihd6#

Kotlin延伸液

在代码中的某个位置添加以下代码:

val Fragment.packageName get() = activity?.packageName

然后直接在Fragment代码中使用packageName

val name = packageName
rta7y2nd

rta7y2nd7#

试试这个:

requireActivity().getPackageName()

相关问题