非静态方法android的不同活动

时间:2014-08-14 11:28:45

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

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

P.S。 -something()不会启动新活动。它只是执行随机操作。

5 个答案:

答案 0 :(得分:1)

也许继承可以提供帮助。创建一个(抽象)类(让我们称之为C),它扩展Activity并实现 something 方法(公共或受保护)。

然后创建A和B类,扩展C而不是Actvity。这样你就可以从这两个活动中调用某些东西

类似的东西:

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



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

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

答案 1 :(得分:1)

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

 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();

答案 2 :(得分:0)

你可以这样做,

如果它是多个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
}

答案 3 :(得分:0)

取决于something()的作用。您可以使用http://developer.android.com/reference/android/app/Activity.html#startActivityForResult(android.content.Intent,int)

在活动B结束后调用活动A中的方法

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

答案 4 :(得分:0)

下面显示的是示例代码:

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

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

}

活动2:

公共类Act2扩展了活动{

@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

}

}