我想从其他活动中调用主要活动中的公共方法。我怎么能这样做?
class MainActivity extends Activity {
public void myMethod() {}
}
class MyActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// How can I call myMethod() in MainActivity?
}
}
答案 0 :(得分:3)
取决于。
如果您只想使用某些共享功能(例如执行某些计算的代码),则会出现这种情况。
我建议将此共享功能移至某个独立类并从那里调用它。
如果您想调用MainActivity,MainActivity会对MainActivity UI执行某些操作,则必须使用Intent(http://developer.android.com/reference/android/content/Intent.html),因为MainActivity应该首先恢复,并且只有在此之后它才能恢复用UI做点什么。
在这种情况下,您可能需要为intent添加一些额外的额外内容,这些内容将由MainActivity代码(在onCreate或onResume中)解析并调用适当的方法。
答案 1 :(得分:2)
将其设为static
,传入activity
,实例化,还是更好地重新思考设计方法?我认为您不应该在activity
的其他main activity
中调用方法 - 可能更适合制作new class
吗?
静态代码:
class MainActivity extends Activity
{
public void myMethod()
{
MyActivity.runMyMethod();
}
}
class MyActivity extends Activity
{
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
public static void runMyMethod()
{
//Run code...
}
}
实例化活动:
class MainActivity extends Activity
{
public void myMethod()
{
MyActivity myActivity = new MyActivity();
myActivity.runMyMethod();
}
}
class MyActivity extends Activity
{
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
public void runMyMethod()
{
//Run code...
}
}
传递活动参考:
class MainActivity extends Activity
{
public void onCreate(Bundle savedInstanceState)
{
OtherActivity otherActivity = new OtherActivity(this);
}
public void yourMethod()
{
}
}
class OtherActivity extends Activity
{
MainActivity mainRefrence;
OtherActivity(MainActivity main)
{
mainRefrence = main;
}
public void onCreate()
{
mainRefrence.yourMethod();
}
}
答案 2 :(得分:1)
如何从另一项活动中调用MainActivity中的方法已解决
有时您无法使该方法保持静态,因为它取决于MainActivity中的所有其他状态。使所有依赖状态也是静态的,等于只使一切全局,这不是一个好主意。
想要在MainActivity上调用非静态方法也没有错 - 它就像一个类调用另一个类。
这是你做的事情:
您的应用程序在所有活动中共享(前提是它们都在同一个过程中)。此应用程序可用于存储状态。虽然一个明智的想法只是存储你的活动的实例,并让他们存储他们各自的状态,这是我们将要做的。
创建自己的Application子类:
public class MyApplication extends Application
{
MainActivity mainActivity;
}
调整清单:
<application
android:name=".MyApplication"
...
在MainApplication初始化MyApplication.mainActivity
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
MyApplication ma = (MyApplication)getApplication();
ma.mainActivity = this;
...
在OtherActivity
中检索MainActivity实例。
private MainActivity mainActivity;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
MyApplication ma = (MyApplication)getApplication();
mainActivity = ma.mainActivity;
...
mainActivity.someMethodOnMainActivtiy();
答案 3 :(得分:0)
将myMethod()声明为静态。
public static void myMethod()
{
...
}
通过 MainActivity.myMethod();
答案 4 :(得分:0)
如果您要从任何活动中调用静态方法,您应该有一个Utililty或Helper类,您可以从任何地方静态调用这些方法,我认为这不是一个很好的实践方法。活跃到另一个
以下是帮助程序类的示例
public Class ActivityHelper{
public static void myMethod(Context context){
// If you need to do something with your Context
}
/* and you can create a lot of static methods that you would need to use from any activity or service on your app*/
}