Как создать публичный метод? - PullRequest
0 голосов
/ 12 октября 2011

Это вопрос типа новичка. Я хочу создать публичный метод, к которому может обращаться любой вид деятельности в приложении. Метод, который я пытаюсь создать, - это простой способ показать 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 ]

1 голос
/ 12 октября 2011

Определите новый класс статическим методом:

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 и попытаться дать ей лучшее имя, чем я; -)

Или вы можете создать суперкласс, в котором реализован ваш метод, и расширить все ваши действия из него.

0 голосов
/ 12 октября 2011

добавить "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;
}
0 голосов
/ 12 октября 2011

Если методы, которые обращаются к нему, находятся в одном классе, вам не нужно ничего менять. Но если методы других классов могут получить доступ к этому методу. Просто измените частное на общедоступное

public PackageInfo getPackageInfo() {
    PackageInfo pi = null;
    try {
         pi = this.getPackageManager().getPackageInfo(this.getPackageName(), PackageManager.GET_ACTIVITIES);
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }
    return pi;
}
0 голосов
/ 12 октября 2011

2 простых варианта:

  1. сделайте этот метод общедоступным в абстрактном Activity и сделайте так, чтобы все ваши действия наследовали этот класс.
  2. сделать его общедоступным статическим и добавить контекстный параметр, поместив его в служебный класс.
...