【问题标题】:Android, should all code be written in an ActivityAndroid,所有代码都应该写在一个Activity中吗
【发布时间】:2015-06-23 00:52:33
【问题描述】:

我比 Android 更熟悉 iOS 开发,我想知道是否所有代码都应该写在一个 Activity 中,而不是有一个“模型”类。

我有几个屏幕,每个屏幕都有几个复选框,我希望它们在点击时表现相同,我试图弄清楚如何在每个活动中不编写重复代码的情况下做到这一点。谢谢!

【问题讨论】:

  • 也许是一些自定义父活动的子类?
  • 你在说什么屏幕?片段还是单独的活动?
  • 所有 OOP 爵士乐仍然适用,因为 Android 开发是用 Java 完成的,Java 是一种功能齐全的 OOP 语言,因此您不需要从根本上改变您的开发实践,惯用的方式做事情确实会改变。
  • @Simas 单独的活动,但我仍然不确定如何为每个活动实现相同的功能。我是否应该只在一个活动中实现该功能,然后让其余的活动的对象使用它的 onclick 方法?

标签: android android-activity checkbox


【解决方案1】:

不,你不应该。如果您熟悉 java,请将活动视为添加了 OO 的 main 的扩展。 在您的特定示例中,您可以使用以下方法创建一个类: <MethodName>(View <checkboxClickedName>){ //your code here }。然后将其添加到 XML android:onClick="<MethodName>" 中的复选框中,您可能需要完整的包路径(例如 com.example.app。)

注意:如果您需要的某些命令/对象仅在活动中可用,您应该在 extends Activity 的类中创建它,或者最好在正在运行的活动中创建它。

【讨论】:

    【解决方案2】:

    您可以拥有一个扩展活动的基类,该活动包含您希望在单击时执行的方法(实现的或抽象的)。在创建新活动时使用这个新的基类而不是活动。在布局xml中,你可以将每个复选框的onclick设置为你想要执行的基础活动中的方法。

    【讨论】:

      【解决方案3】:

      最佳做法是使用单个 Activity 并切换片段,就好像它们是您的屏幕一样。然后,Activity 可以简单地实现片段将重用的侦听器接口。


      由于您有多项活动,这变得有点困难。要真正重用单个侦听器,我可以想到一个(不是那么漂亮)选项。创建一个静态监听器并延迟加载它:

      public class MainActivity extends Activity {
      
          private static View.OnClickListener sCheckboxClickListener;
      
          public static View.OnClickListener getCheckboxClickListener() {
              if (sCheckboxClickListener == null) {
                  sCheckboxClickListener = new View.OnClickListener() {
                      @Override
                      public void onClick(View v) {
                          // Work with v
                      }
                  };
              }
              return sCheckboxClickListener;
          }
      
      }
      

      并且在您的每个活动中调用:

      findViewById(R.id.checkbox1)
                  .setOnClickListener(MainActivity.getCheckboxClickListener());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-09
        • 1970-01-01
        • 2012-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-14
        • 2019-12-20
        相关资源
        最近更新 更多