Android 如何在活动窗体非活动类中调用方法
我有活动课和非活动课。如何从非活动类调用活动类中的方法Android 如何在活动窗体非活动类中调用方法,android,android-activity,Android,Android Activity,我有活动课和非活动课。如何从非活动类调用活动类中的方法 public class MainActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main2); DataClass dc = new DataClass()
public class MainActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
DataClass dc = new DataClass();
dc.show();
}
public void call(ArrayList<String> arr) {
// Some code...
}
}
公共类MainActivity扩展活动{
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
DataClass dc=新的DataClass();
dc.show();
}
公共作废调用(ArrayList arr){
//一些代码。。。
}
}
公共类数据类{
公共无效显示(ArrayList数组){
//这里我想把这个ArrayList值发送到调用中
//活动类中的方法。
MainActivity act=新的MainActivity();
调用(数组);
}
}
你可以做几件事。我认为最简单的方法是将上下文
发送到数据类
中,如下所示:
DataClass dc =new DataClass();
dc.show(this);
并在数据类中
将上下文保存到全局变量上下文上下文
。然后像这样使用它:
((MainActivity)context).call(array);
只需在DateClass内创建一个回调接口
public DateClass {
public interface IDateCallback {
void call(ArrayList<String> arr);
}
private IDateCallback callerActivity;
public DateClass(Activity activity) {
callerActivity = (IDateCallback)activity;
}
...
}
public void show(ArrayList<String> array) {
callerActivity.Call(array);
...
}
//And implements it inside your activity.
public class MainActivity extends Activity
implements IDateCallback {
public void call(ArrayList<String> arr) {
}
}
公共日期类{
公共接口IDateCallback{
无效调用(ArrayList arr);
}
私密性;实用性;
公共日期类(活动){
callerActivity=(IDateCallback)活动;
}
...
}
公共无效显示(ArrayList数组){
调用(数组);
...
}
//并在您的活动中实现它。
公共类MainActivity扩展了活动
实现IDateCallback{
公共作废调用(ArrayList arr){
}
}
只需制作一个单件,如下所示:
TeacherDashboardSingleton:
public class TeacherDashboardSingleton {
public Teacher_Dashboard aa;
private static final TeacherDashboardSingleton ourInstance = new TeacherDashboardSingleton();
public static TeacherDashboardSingleton getInstance() {
return ourInstance;
}
}
我的活动类别:
onCreate(....){
....
TeacherDashboardSingleton.getInstance().aa = this;
....
}
这将创建与“活动”中相同实例的对象
现在,您可以在任何地方使用它,请参见,是的,我认为这应该是最好的方法。但是关于这种方法的一个问题是,既然我们将一个活动引用传递给DateClass,那么它不会导致内存泄漏吗?因为DateClass持有对它的引用,所以该活动将无法进行垃圾收集?好问题,老实说,我还没有一个明确的答案。我认为在这种情况下这不是问题,因为活动是活动的,而且据我所知,“内部”日期类正在活动中做一些事情。我的假设是:当活动即将完成时,两个类都将被丢弃。
public class TeacherDashboardSingleton {
public Teacher_Dashboard aa;
private static final TeacherDashboardSingleton ourInstance = new TeacherDashboardSingleton();
public static TeacherDashboardSingleton getInstance() {
return ourInstance;
}
}
onCreate(....){
....
TeacherDashboardSingleton.getInstance().aa = this;
....
}