我在编写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()
方法的任何帮助吗?
提前致谢
答案 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
并从中提取日期意图的数据。