如何从另一个类中调用MainActivity中的方法?

在主要活动中声明方法时,如何在另一个类中调用startChronometer方法?

内部MainActivity:

public void startChronometer(){ mChronometer.start(); showElapsedTime(); } 

在另外一个class里面,我尝试着这样做:

 MainActivity mActivity; mActivity.startChronometer(); 

但是发生了一个错误说

显示java.lang.NullPointerException。

我可以知道我还需要添加到代码吗?

Solutions Collecting From Web of "如何从另一个类中调用MainActivity中的方法?"

初始化它

 MainActivity mActivity= new MainActivity(); 

然后你可以继续

 mActivity.startChronometer(); 

你可以简单地调用一个方法从你的活动中的任何片段,只要做一个像这样的演员:

 ((MainActivity)getActivity()).startChronometer(); 

希望这可以帮助!

我会build议,不应该使一个Activity类的对象。

 MainActivity mActivity = new MainActivity(); // BIG NO TO THIS. 

Android中的所有活动都必须经历活动生命周期,以便它们具有附加的有效上下文。

通过将Activity作为一个普通的Java类来处理,最终会得到一个null上下文。 由于Activity中的大多数方法都是在Context上调用的,所以会得到一个空指针exception,这就是为什么你的应用崩溃了。

相反,将所有需要从其他类中调用的方法移动到一个Utility类中,该类在其构造函数中接受有效的上下文,然后在方法中使用该上下文来完成工作。

但是发生了一个说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 sub Fragment中使用这个代码来调用它的方法。

 ((MainActivity) getActivity()).startChronometer(); 
 public class AddPostActivity extends AppCompatActivity { private static AddPostActivity addPostActivity; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_post); addPostActivity = this; } public static AddPostActivity getInstance() { return addPostActivity; } public void myMethod() { // do something... } ) public Class AnotherClass() { // call this method AddPostActivity.getInstance().myMethod(); } 

您必须将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中创build一个实例,并在该实例中获取getter:

 public class MainActivity extends AbstractMainActivity { private static MainActivity mInstanceActivity; public static MainActivity getmInstanceActivity() { return mInstanceActivity; } 

而onCreate方法只是指向那个activity:

 @Override protected void onCreate(Bundle savedInstanceState) { mInstanceActivity = this; } 

之后,你可以调用任何你想要的类的方法:

 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();