如何在活动形式非活动类中调用方法

Posted

技术标签:

【中文标题】如何在活动形式非活动类中调用方法【英文标题】:how to call method in activity form non activity class 【发布时间】:2013-10-29 15:41:02 【问题描述】:

我有一个 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);                  
    

【问题讨论】:

另见***.com/questions/19666572/…和***.com/questions/16653867/… 【参考方案1】:

只需在 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 持有对它的引用,活动将无法进行垃圾收集?跨度> 好问题,老实说,我还没有明确回答这个问题。我认为在这种情况下这不是问题,因为活动是活跃的,据我所知,“内部”日期类正在活动中做某事。我的假设是:当 Activity 即将结束时,这两个类都将被丢弃。【参考方案2】:

嗯,你可以做几件事。我认为对您来说最简单的方法是将Context 发送到DataClass,如下所示:

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

并在您的DataClass 中将上下文保存到全局变量Context context。然后像这样使用它:

((MainActivity)context).call(array);

【讨论】:

【参考方案3】:
((MainActivity)getContext).array();

【讨论】:

【参考方案4】:

只要做一个像这样的单例:

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

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

现在您可以在任何地方使用它

【讨论】:

以上是关于如何在活动形式非活动类中调用方法的主要内容,如果未能解决你的问题,请参考以下文章

如何在MainActivity类中调用非活动类?

如何从主要活动中调用片段方法

如何从活动中调用服务的方法?

如何从活动中调用片段方法?

从意图活动访问片段方法

从 FirebaseMessagingService 类调用活动类方法