【问题标题】:getPackageName() in Fragment片段中的 getPackageName()
【发布时间】:2017-02-13 19:00:05
【问题描述】:

我在 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()”。 可能是什么问题?

【问题讨论】:

    标签: android android-fragments bitmap icons


    【解决方案1】:

    试试这个而不是 getPackageName()

    getActivity().getPackageName()

    【讨论】:

    • 我不使用getPackageManager(),我使用getPackageName()。但它适用于 getActivity().getPackageName()。谢谢。
    • 对不起,我弄错了。 getPackageName() 是正确的!
    【解决方案2】:

    这是在 Fragment 中获取 Kotlin 的包名称

    context!!.packageName

    【讨论】:

      【解决方案3】:

      BuildConfig.APPLICATION_ID


      最简单的方法大概是:

      String PkgName = BuildConfig.APPLICATION_ID
      

      注意事项:

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

      【讨论】:

        【解决方案4】:
        getPackageName()
        

        在 Activity 中定义。你不能直接在你的Fragment 中使用它。尝试使用:

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

        最好检查 getActivity 是否为空。所以你的应用程序不会崩溃。阅读此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
        

        【讨论】:

        • 我怎样才能把 if 语句放在方法中?我不想使用静态变量,因为这样我可以将这种方法用于不同的位图。
        • 我的问题是,如果我在 return 之前关闭 end 语句,我不能使用 resizedBitmap 变量,但是如果我在 return 之后关闭它,那么该方法会错过 return 语句。
        【解决方案5】:

        对于 Kotlin

        requireActivity().packageName
        

        【讨论】:

          【解决方案6】:

          FragmentonCreateView()中获取PackageManager的另一种方式

          view.getContext().getPackageName()
          

          【讨论】:

            【解决方案7】:

            Kotlin 扩展解决方案

            在你的代码中添加这个:

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

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

            val name = packageName
            

            【讨论】:

              【解决方案8】:

              试试这个:

              requireActivity().getPackageName()
              

              【讨论】:

                猜你喜欢
                • 2013-09-13
                • 2014-02-28
                • 2018-06-27
                • 1970-01-01
                • 1970-01-01
                • 2011-10-14
                • 2018-10-14
                • 1970-01-01
                相关资源
                最近更新 更多