【问题标题】:non-static method different activities android非静态方法不同的活动android
【发布时间】:2014-08-14 11:28:44
【问题描述】:

我有 2 个活动 - A 和 B。 我在活动 B 中有一个非静态方法 something()。 我需要在活动 A 中调用 something(),而 something() 不能声明为静态。 最好的方法是什么?

附: -something() 不会启动新的活动。它只是执行随机操作。

【问题讨论】:

  • 不要尝试这个。活动可能只是类,但它们不是 POJO,您不应该尝试从另一个活动访问一个活动。这就是Intents 的用途。相反,将这些方法放入一个公共类中并从每个活动中调用它们。

标签: android android-activity non-static function-call


【解决方案1】:

也许继承会有所帮助。创建一个(抽象的)类(我们称之为 C),它扩展了 Activity 并实现了 something 方法(公共的或受保护的)。

然后创建类 A 和 B,它们扩展 C 而不是 Actvity。这样您就可以从两个活动中调用 something

类似:

public class C extends Activity {
   protected void something() {
       // ...
   }
}



public class A extends C {
    // use something() somewhere
}

public class B extends C {
    // use something() somewhere
}

【讨论】:

    【解决方案2】:

    在多线程环境中可能会使用更简单、更简洁的替代版本,但代价是并发性可能较低:

     public class SingletonDemo {
            private static SingletonDemo instance = null;
            private SingletonDemo() { }
            public static synchronized SingletonDemo getInstance() {
                if (instance == null) {
                    instance = new SingletonDemo();
                }
                return instance;
            }
    
           public void yourmethod() {
           }
        }
    

    您可以将这样的类用作数据存储并包含常用方法。

    访问它:

       SingletonDemo.getInstance().yourmethod();
    

    【讨论】:

      【解决方案3】:

      你可以这样做,

      如果它在多个 Activity 之间共享功能,则为您的 Activity 创建一个派生自 Activity 的基类。

      public class BaseActivity extends Activity
      {
            // here write your common method
      }
      
      
       public class B extends BaseActivity
      {
           // here you can call the method defined in BaseActivity
      }
      

      【讨论】:

        【解决方案4】:

        取决于something() 的作用。你可以在Activity B结束后调用Activity A中的方法,使用http://developer.android.com/reference/android/app/Activity.html#startActivityForResult(android.content.Intent, int)

        您也可以将逻辑提取到另一个类中并在两个活动中实例化该类。您还可以创建一个单例类,并使用 Dagger 依赖注入系统 (http://square.github.io/dagger/) 将其注入到您的类中。选择取决于您想做什么。

        【讨论】:

          【解决方案5】:

          下面是示例代码:

          活动一: 公共类 MainActivity 扩展 ActionBarActivity { ImageView 图像;

          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              Act2.something();
          }
          

          }

          活动二:

          公共类 Act2 扩展 Activity {

          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main_activityq);
          
              something();
          }
          
          public static void something() {
              // TODO Auto-generated method stub
          
          }
          

          }

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-03-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多