android 调用其他activity方法,如何从另一个类调用MainActivity中的方法?
您只需执行以下操作即可轻松地从Activity中的任何Fragment调用方法:((MainActivity)getActivity()).startChronometer();希望这可以帮助!首先初始化它MainActivity mActivity= new MainActivity();然后你可以继续mActivity.startChronometer();我建议,不应该成为Activity类
您只需执行以下操作即可轻松地从Activity中的任何Fragment调用方法:
((MainActivity)getActivity()).startChronometer();
希望这可以帮助!
首先初始化它
MainActivity mActivity= new MainActivity();
然后你可以继续
mActivity.startChronometer();
我建议,不应该成为Activity类的对象。
MainActivity mActivity = new MainActivity(); // BIG NO TO THIS.
Android中的所有活动都必须通过活动生命周期,以便它们附加有效的上下文。
通过将Activity视为普通Java类,您最终会得到一个空上下文。 由于Activity中的大多数方法都在其Context上调用,因此您将获得空指针exception,这就是您的应用程序崩溃的原因。
相反,将需要从其他类调用的所有此类方法移动到Utility类中,该类在其构造函数中接受有效上下文,然后在方法中使用该上下文来完成工作。
MainActivity.java
public class MainActivity extends AppCompatActivity { private static MainActivity instance; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); instance = this; } public static MainActivity getInstance() { return instance; } public void myMethod() { // do something... } )
AnotherClass.java
public Class AnotherClass() { // call this method MainActivity.getInstance().myMethod(); }
但是发生了一个错误,它出现了java.lang.NullPointerException。
那是因为,你从未初始化你的MainActivity。 你应该在调用它的方法之前初始化你的对象。
MainActivity mActivity = new MainActivity();//make sure that you pass the appropriate arguments if you have an args constructor mActivity.startChronometer();
在MainActivity子Fragment中使用此代码来调用其上的方法。
((MainActivity) getActivity()).startChronometer();
您必须将MainActivity的实例传递到另一个类,然后您可以从任何地方调用所有公共(在MainActivity中)。
MainActivity.java
public class MainActivity extends AppCompatActivity { // Instance of AnotherClass for future use private AnotherClass anotherClass; @Override protected void onCreate(Bundle savedInstanceState) { // Create new instance of AnotherClass and // pass instance of MainActivity by "this" anotherClass = new AnotherClass(this); } // Method you want to call from another class public void startChronometer(){ ... } }
AnotherClass.java
public class AnotherClass { // Main class instance private MainActivity mainActivity; // Constructor public AnotherClass(MainActivity activity) { // Save instance of main class for future use mainActivity = activity; // Call method in MainActivity mainActivity.startChronometer(); } }
我做了什么,它的工作原理是在MainActivity中创建一个实例,并为该实例创建getter:
public class MainActivity extends AbstractMainActivity { private static MainActivity mInstanceActivity; public static MainActivity getmInstanceActivity() { return mInstanceActivity; }
而onCreate方法只是指向该活动:
@Override protected void onCreate(Bundle savedInstanceState) { mInstanceActivity = this; }
在onDestroy中,您应该将此实例设置为null:
@Override protected void onDestroy() { super.onDestroy(); mInstanceActivity = null; }
之后,您可以调用所需的任何类中的每个方法:
MainActivity.getmInstanceActivity().yourMethod();
简单地说,您可以将此方法设为静态,如下所示:
public static void startChronometer(){ mChronometer.start(); showElapsedTime(); }
您可以在其他类中调用此函数,如下所示:
MainActivity.startChronometer();
您可以将此方法设为静态。
public static void startChronometer(){ mChronometer.start(); showElapsedTime(); }
您可以在其他类中调用此函数,如下所示:
MainActivity.startChronometer();
要么
你可以在第二类中创建主类的对象,比如
MainActivity mActivity = new MainActivity(); mActivity.startChronometer();
更多推荐




所有评论(0)