如何从主类调用非静态方法

时间:2013-09-06 18:43:41

标签: java android

我在编写android时遇到了这个问题。如果我的主类中有一个非静态方法(内部代码必须是非静态的),我应该如何从另一个类中调用它,因为很明显我无法创建另一个实例我的主类没有启动程序的新实例?

public class MainActivity extends FragmentActivity {
public static String starttime = "";
public static String startdate = "";
public static String endtime = "";
public static String enddate = "";
public static boolean start = false;
}

public void setDateText() {
    EditText TextStart = (EditText)findViewById(R.id.txt_start);
    TextStart.setText(startdate + " at " + starttime, TextView.BufferType.NORMAL);
    EditText TextEnd = (EditText)findViewById(R.id.txt_end);
    TextEnd.setText(enddate + " at " + endtime, TextView.BufferType.NORMAL);
}

有关如何从其他类调用setDateText()方法的任何帮助吗?

提前致谢

4 个答案:

答案 0 :(得分:0)

在不知道哪个其他类试图访问MainActivity实例的情况下,您需要将此实例的引用传递给其他对象,可能是将this传递给构造函数或方法。 / p>

例如

public class MainActivity extends FragmentActivity {
    public void someMethod() {
        SomeClass someClass = new SomeClass(this); // pass this for callbacks
        // ~ more
    }
}

其中SomeClass是您需要调用MainActivity的{​​{1}}方法的类。

答案 1 :(得分:0)

我试图理解你需要从另一个活动中调用该函数。您的主要活动无论如何不在前台,因此如果您从那里调用此功能,则不会显示日期。完成第二个活动后,您将返回MainActivity,那么只需要调用此函数。

如果是这样,那么您可以使用startActivityForResult()来启动第二个活动,然后通过onActivityResult()将日期信息传递回MainActivity。您可以在MainActivity中调用此函数。

答案 2 :(得分:0)

通常,您无法从静态类型调用非静态方法,因此您可以这样做:

MainActivity m = new MainActivity(); // No constructor needed in class def.

m.setDateText();

但是,当程序启动时,你不会在开始时给你的JVM任何东西调用,所以你需要添加:

  @Override
//the function called when activity is created
public void onCreate(Bundle savedInstanceState) {
    //call the create fct. Of the base class
    super.onCreate(savedInstanceState);
    //load the layout specified in the layout.xml
    setContentView(R.layout.main);

    MainActivity m = new MainActivity();

    m.setDateText();
} 

创建活动时将调用此方法。

转到Android - A beginner's guide了解详情。

另外,请注意您的语法,您的方法def不在您的类def。

之外

答案 3 :(得分:0)

如果您必须在活动启动时调用setDate(),则可以在启动活动时在Intent中传递日期,并在MainActivity的{​​{1}中提取日期方法。

如果您必须在启动以外的其他时间调用setDate(),则可以从其他活动/组件发送广播,并使onCreate收听MainActivity并从中提取日期意图的数据。