我有2项活动 - A和B. 我在活动B中有一个非静态方法something()。 我需要在活动A中调用something()而不能将某些东西()声明为静态。 最好的方法是什么?
P.S。 -something()不会启动新活动。它只是执行随机操作。
答案 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)
您也可以将逻辑转换为另一个类,并在两个活动中实例化该类。您还可以创建一个单例类,并使用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
}
}