片段中的getPackageName()

时间:2017-02-13 19:00:06

标签: android android-fragments bitmap icons

我使用此方法调整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()”。 可能是什么问题?

6 个答案:

答案 0 :(得分:20)

尝试使用此代替getPackageName()

  

getActivity().getPackageName()

答案 1 :(得分:3)

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

您还可以在主活动中创建静态变量,将其实例化为包名称。然后在片段中使用该变量。

    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

答案 2 :(得分:1)

这里是在片段中获取Kotlin的程序包名称

context!!.packageName

答案 3 :(得分:0)

Fragment onCreateView()

中获取PackageManager的另一种方法
view.getContext().getPackageName()

答案 4 :(得分:0)

BuildConfig.APPLICATION_ID


最简单的方法可能是:

String PkgName = BuildConfig.APPLICATION_ID

注意:

  • 您可以从代码中的任何位置访问BuildConfig
  • 不适用于图书馆

答案 5 :(得分:0)

Kotlin扩展解决方案

将此添加到您的代码中的某个位置:

mask = df['E'].groupby(df['D'].eq(-1).cumsum()).transform('any')
df.loc[mask, 'E'] = df.loc[mask, 'E'].fillna(0)

然后直接在您的片段代码中直接使用packageName

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