如何创建公共方法?

时间:2011-10-12 15:48:00

标签: android methods public-method

这是一个新手型问题。我想创建一个可以被应用程序中的任何活动访问的公共方法。我尝试创建的方法是一个显示versionName或VersionCode的简单方法。这里是我在私有方法中使用的代码,我觉得必须有一种简单的方法让我的所有活动都可以访问这个方法,而不必单独为每个活动添加私有方法代码,只需添加一个公共描述符似乎不起作用...... 谢谢!

方法:

private PackageInfo getPackageInfo() {
        PackageInfo pi = null;
        try {
             pi = this.getPackageManager().getPackageInfo(this.getPackageName(), PackageManager.GET_ACTIVITIES);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return pi;
    }

示例用法:

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        PackageInfo versionInfo = getPackageInfo(); 
        String about = new String(
                    versionInfo.versionName +"\n" + getString(R.string.about));

4 个答案:

答案 0 :(得分:1)

使用静态方法定义新类:

public class PackageInfoHandler{
   public static PackageInfo getPackageInfo(Context ctx){
    try{
     return ctx.getPackageManager().getPackageInfo(this.getPackageName(), PackageManager.GET_ACTIVITIES);
    } catch (PackageManager.NameNotFoundException e)
      e.printStackTrace();
   }
}

在你的活动中使用它

PackageInfo versionInfo = PackageInfoHandler.getPackageInfo(this);

作为一个补充,你可以从PackageInfoHandler返回字符串并尝试给它一个比我更好的名字; - )

或者你可以创建一个超类来实现你的方法,并从中扩展你的所有活动。

答案 1 :(得分:0)

2个简单选项:

  1. 在抽象活动中公开此方法,并使您的每个活动都继承此类。
  2. 将其设为public static并添加上下文参数,将其放在实用程序类中。

答案 2 :(得分:0)

如果访问它的方法属于同一个类,那么你不需要改变任何东西。但是,如果其他类的方法可以访问此方法。只需将私人更改为公开

即可
public PackageInfo getPackageInfo() {
    PackageInfo pi = null;
    try {
         pi = this.getPackageManager().getPackageInfo(this.getPackageName(), PackageManager.GET_ACTIVITIES);
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }
    return pi;
}

答案 3 :(得分:0)

将“public”添加到方法

public PackageInfo getPackageInfo() {
    PackageInfo pi = null;
    try {
         pi = this.getPackageManager().getPackageInfo(this.getPackageName(),  
     PackageManager.GET_ACTIVITIES);
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }
    return pi;
}