如何从其他活动中调用主要活动中的方法?
我想从其他活动中调用主要活动中的公共方法。 我怎样才能做到这一点?
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? } }
这取决于。
-
在这种情况下,如果您只想使用一些共享function(例如执行某些计算的代码)。
我建议将此共享function移动到某个独立类并从那里调用它。
-
如果你想调用MainActivity,那么MainActivity用MainActivity UI做了一些事情,你将不得不使用Intent( http://developer.android.com/reference/android/content/Intent.html ),因为MainActivity应该是首先恢复,只有在此之后它才能用UI做一些事情。
在这种情况下,您可能需要向intent添加一些额外的额外内容,这将由MainActivity代码(在onCreate或onResume中)解析并调用适当的方法。
使其static
,传递activity
,实例化,或更好地重新思考设计方法? 我不认为你应该在main activity
另一个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(); } }
如何从另一个活动SOLVED中调用MainActivity中的方法
有时您无法使方法成为静态,因为它取决于MainActivity中的所有其他状态。 使所有依赖状态也是静态的,就等于让一切都变得全局化 ,这不是一个好主意。
想要在MainActivity上调用非静态方法也没有错 – 它就像一个类调用另一个类。
这是你做的:
您的应用程序在所有活动中共享(前提是它们都在同一个过程中)。 此应用程序可用于存储状态。 虽然一个明智的想法只是存储你的活动的实例,并让他们存储他们各自的状态,这是我们将要做的。
-
创建自己的Application子类:
public class MyApplication extends Application { MainActivity mainActivity; }
-
调整清单:
-
在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实例调用方法:
mainActivity.someMethodOnMainActivtiy();
将myMethod()声明为static。
public static void myMethod() { ... }
通过MainActivity.myMethod();
在应用程序的任何位置调用它MainActivity.myMethod();
如果您要从任何活动中调用静态方法,那么您应该有一个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*/ }