Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在活动窗体非活动类中调用方法_Android_Android Activity - Fatal编程技术网

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;
....
}