如何在Android中使用我的“基类”扩展PreferenceActivity类?

4
这种情况是这样的:我正在使用“BaseClass”,其中包含一些标准功能(如标准菜单生成器),而所有其他活动都在“扩展”它以获得相同的菜单和其他内容。
public class Base extends Activity {

//some stuff

}

那么

public class MainActivity extends Base {

//some other stuff

}

public class AdditionalActivity extends Base {

//some other stuff x2

}

// etc.

当我想在首选项活动中使用相同的功能时,问题就出现了。此时,类必须“扩展”PreferenceActivity而不是标准类。我该如何更好地处理这个问题?我已经阅读了有关“实现vs扩展”行为等方面的内容,但由于我在面向对象编程方面缺乏经验,因此无法找到最佳解决方案。从Base类复制并粘贴到扩展PreferenceActivity的Prefs类似乎可以解决问题,但这肯定是最糟糕的解决方案。

感谢您的协助!

2个回答

4
您可能想创建一个PreferenceBaseActivity类,它扩展了PreferencesActivity。从这里开始,您有几个选择:
  1. 要么重新实现BaseActivity中的相同方法(不是最佳选择)。
  2. BaseActivity中的方法提取到ActivityHelper类中,并使您的BaseActivityPreferencesBaseActivity都包含对助手的引用。这样,您可以将工作委托给ActivityHelper

谢谢,我已经通过HelperClass完成了它 - 它确实有效,但是现在我尝试构建的菜单如果从Helper类运行会失败并抛出未捕获的异常 :( - Nick

1

考虑将可重复使用的方法放入一个辅助类中,并向BasePrefs添加一个实例:

public class Base extends Activity {   // same with Prefs
  private Helper helper;
  public Base() {
    // .. super calls, etc
    this.helper = new Helper(this);
  }
}

public class Helper {
   private Activity parent;
   public Helper(Activity parent) {
     this.parent = parent;
   }

   // your methods. If you need to call methods from Activity, use
   // the parent reference
}

谢谢,它确实起作用,但是现在我正在尝试构建的菜单在从 Helper 类运行时会出现未捕获的异常 :( - Nick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接