您只需执行以下操作即可轻松地从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();

Logo

一站式 AI 云服务平台

更多推荐