android 中的代码可重用性
code reusability in android
我有 3 个具有相同工具栏的活动。我想避免在每个 activity 上复制代码。我知道我可以在每个布局中使用 <include>
标签,以便为工具栏重用相同的布局。现在我想在所有活动中共享工具栏每个按钮的事件处理程序。我正在考虑制作一个 toolbarActivity
其中 extends Activity
class 和 3 个活动 extends toolbarActivity
,所以在 onCreate 方法中,当我调用 base.OnCreate
时,所有事件处理程序将被定义。但是,SetContentLayout
还没有被调用,所以 base.OnCreate
不会找到按钮。请记住,这 3 个活动有不同的布局。您是否知道重用代码以避免为每个 activity 复制 OnCreate 方法中的所有事件处理程序并允许我覆盖某些功能的最佳方法?
如果您在每个布局中保留与活动中的引用相关联的按钮和其他内容的命名约定,那么您应该没有问题。
例如,如果您在一个布局中有一个“@+id/login_button”,那么只需在下一个布局中对相同类型的按钮使用相同的约定就可以了。
您可以定义一个基础 activity,您的所有其他活动都将扩展该基础,并使其实现点击侦听器(或您用来侦听按钮按下的任何接口)。您可以检查被点击视图的 ID,从而提供一个回调来执行您想要的任何逻辑。
public class BaseActivity extends Activity implements OnClickListener {
public void onCreate() {
myBtn.setOnClickListener(this);
}
public void onClick(View v) {
if (R.id.my_btn == v.getId()) {
onFoo();
}
}
protected void onFoo() {
// TODO handle foo
}
}
如果您需要提供不同的行为,您可以覆盖子类中的方法。
public class DifferentActivity extends BaseActivity {
@Override protected void onFoo() {
super.onFoo()
// TODO handle foo differently
}
}
Android 用于移动设备,因此在开发时他们无法知道用户设备的大小和维度。在大型设备上可以容纳许多 UI 个元素。在较小的设备上,几乎没有 UI 元素可以容纳。您的问题与这种困境有关,因此有很多可能的答案。从逻辑上讲,要使代码正常工作,它必须存在于源代码中,即您可以剪切和粘贴,这是一个糟糕的解决方案,因为您最终会得到这个 "same" 工具栏的多个版本,或者您可以 refer/reference 一个 "external" 工具栏。碎片浮现在脑海中,就像拥有一个单独的源文件一样。 UI 源文件可以被认为是成对的。 Java 表示动态元素,xml 表示静态元素。因此,总而言之,只需引用一个已实现您的工具栏的外部片段。
我有 3 个具有相同工具栏的活动。我想避免在每个 activity 上复制代码。我知道我可以在每个布局中使用 <include>
标签,以便为工具栏重用相同的布局。现在我想在所有活动中共享工具栏每个按钮的事件处理程序。我正在考虑制作一个 toolbarActivity
其中 extends Activity
class 和 3 个活动 extends toolbarActivity
,所以在 onCreate 方法中,当我调用 base.OnCreate
时,所有事件处理程序将被定义。但是,SetContentLayout
还没有被调用,所以 base.OnCreate
不会找到按钮。请记住,这 3 个活动有不同的布局。您是否知道重用代码以避免为每个 activity 复制 OnCreate 方法中的所有事件处理程序并允许我覆盖某些功能的最佳方法?
如果您在每个布局中保留与活动中的引用相关联的按钮和其他内容的命名约定,那么您应该没有问题。
例如,如果您在一个布局中有一个“@+id/login_button”,那么只需在下一个布局中对相同类型的按钮使用相同的约定就可以了。
您可以定义一个基础 activity,您的所有其他活动都将扩展该基础,并使其实现点击侦听器(或您用来侦听按钮按下的任何接口)。您可以检查被点击视图的 ID,从而提供一个回调来执行您想要的任何逻辑。
public class BaseActivity extends Activity implements OnClickListener {
public void onCreate() {
myBtn.setOnClickListener(this);
}
public void onClick(View v) {
if (R.id.my_btn == v.getId()) {
onFoo();
}
}
protected void onFoo() {
// TODO handle foo
}
}
如果您需要提供不同的行为,您可以覆盖子类中的方法。
public class DifferentActivity extends BaseActivity {
@Override protected void onFoo() {
super.onFoo()
// TODO handle foo differently
}
}
Android 用于移动设备,因此在开发时他们无法知道用户设备的大小和维度。在大型设备上可以容纳许多 UI 个元素。在较小的设备上,几乎没有 UI 元素可以容纳。您的问题与这种困境有关,因此有很多可能的答案。从逻辑上讲,要使代码正常工作,它必须存在于源代码中,即您可以剪切和粘贴,这是一个糟糕的解决方案,因为您最终会得到这个 "same" 工具栏的多个版本,或者您可以 refer/reference 一个 "external" 工具栏。碎片浮现在脑海中,就像拥有一个单独的源文件一样。 UI 源文件可以被认为是成对的。 Java 表示动态元素,xml 表示静态元素。因此,总而言之,只需引用一个已实现您的工具栏的外部片段。