如何从非 Activity 类中调用 Activity 中的方法

9
我有一个Activity和非Activity类。如何从非Activity类调用Activity类中的方法?
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...
    }
}

public class DataClass {

    public void show(ArrayList<String> array) {
        // Here I want to send this ArrayList values into the call
        // method in activity class.

       MainActivity act = new MainActivity();
       act.call(array);                  
    }
}

请参考以下链接:https://dev59.com/5mIk5IYBdhLWcg3wBZ_7 和 http://stackoverflow.com/questions/16653867/android-call-method-from-an-other-activity。 - RenniePet
4个回答

14

只需在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) {

    }  
}

是的,我认为这应该是首选的方法。 但是,关于这种方法有一个问题,因为我们将活动引用传递给DateClass,所以它不会被垃圾回收,因为DateClass持有对它的引用,这样会导致内存泄漏吗? - akshayt23
好问题,说实话,我对那个问题没有一个明确的答案。我认为在这种情况下不是问题,因为活动是活跃的,而且我理解“内部”日期类正在活动中做某些事情。我猜想:当活动结束时,这两个类都会被回收。 - kameny

7

有几件事情你可以做。我认为对你来说最简单的方法是像这样将Context发送到DataClass中:

DataClass dc =new DataClass();
dc.show(this);

在你的 DataClass 中将上下文保存到全局变量 Context context 中。然后按如下方式使用它:
((MainActivity)context).call(array);

2
((MainActivity)getContext).array();

0

只需像这样创建一个单例:

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

这将创建一个与活动中相同实例的对象

现在你可以从任何地方使用它


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接