在库文件中发生的事件上调用MainActivity.java中的方法

在库文件中发生的事件上调用MainActivity.java中的方法,java,android,Java,Android,我把这个库包括在我的android项目中。在maintactity.java中,onCreate方法包括如下内容: SimpleCardStackAdapter adapter = new SimpleCardStackAdapter(this); //This should also be done on an event in the library class: adapter.add(new CardModel("Title2", "Description

我把这个库包括在我的android项目中。在maintactity.java中,onCreate方法包括如下内容:

SimpleCardStackAdapter adapter = new SimpleCardStackAdapter(this);

//This should also be done on an event in the library class:
adapter.add(new CardModel("Title2", "Description2 goes here", r.getDrawable(R.drawable.picture2)));
public void callfromlibrary() {
    adapter.add(...);
}
现在,在CardContainer.java(属于SwipeableCards库)中有一个事件,我希望在该事件上向适配器添加一个新项目
adapter.add(…)
。正如您在上面看到的,适配器是在maintactity.java中定义的。 我怎样才能做到这一点

我首先考虑在MainActivity中定义一个新方法,然后从我的库类中调用它,如下所示:

SimpleCardStackAdapter adapter = new SimpleCardStackAdapter(this);

//This should also be done on an event in the library class:
adapter.add(new CardModel("Title2", "Description2 goes here", r.getDrawable(R.drawable.picture2)));
public void callfromlibrary() {
    adapter.add(...);
}
然而,该方法和适配器需要静态定义,此外,我不知道如何在CardContainer.java中使用MainActivity的这个方法

我相信我需要创建一种监听器来检查MainActivity中CardContainer.java中发生了什么?我不知道怎么做


感谢您的帮助

请使用Java接口来实现这一点

在cardcontainer类中声明接口

public interface yourInterface{
        public void  callfromlibrary();
    }
并初始化用于调用函数的对象

yourInterface对象=(yourInterface)MainActivity

并在主要活动中实现接口,如

Class MainActivity extends activity implements  yourInterface
并实现callfromlibrary()方法

每当需要使用已创建的对象时,从cardcontainer类调用此方法

object.callfromlibrary()

请使用Java接口来实现这一点

在cardcontainer类中声明接口

public interface yourInterface{
        public void  callfromlibrary();
    }
并初始化用于调用函数的对象

yourInterface对象=(yourInterface)MainActivity

并在主要活动中实现接口,如

Class MainActivity extends activity implements  yourInterface
并实现callfromlibrary()方法

每当需要使用已创建的对象时,从cardcontainer类调用此方法

object.callfromlibrary()

要允许
CardContainer
MainActivity
通信,您可以在
CardContainer
中定义一个接口,并在
MainActivity
中实现它。当事件发生在
CardContainer
中时,它可以调用接口方法,以便将
CardModel
添加到适配器

public class CardContainer extends ... {

   CardContainerEventListener mCallback;

   // Define a interface
   public interface CardContainerEventListener {
       public void addToAdapter();
   }

   // Method to register callback
   void registerCallback(Activity callback) {
       mCallback = (CardContainerEventListener) callback;
   }

   void someFunction() {
       // Event got generated, invoke callback method
       mCallback.addToAdapter(); 
   }
}

public class MainActivity extends Activity implements CardContainer.CardContainerEventListener {

    // Ensure you register MainActivity with CardContainer, by calling 
    // cardContainer.registerCallback(this)

    public void addToAdapter() {
       adapter.add(...);
    }   

}

要允许
CardContainer
MainActivity
通信,您可以在
CardContainer
中定义一个接口,并在
MainActivity
中实现它。当事件发生在
CardContainer
中时,它可以调用接口方法,以便将
CardModel
添加到适配器

public class CardContainer extends ... {

   CardContainerEventListener mCallback;

   // Define a interface
   public interface CardContainerEventListener {
       public void addToAdapter();
   }

   // Method to register callback
   void registerCallback(Activity callback) {
       mCallback = (CardContainerEventListener) callback;
   }

   void someFunction() {
       // Event got generated, invoke callback method
       mCallback.addToAdapter(); 
   }
}

public class MainActivity extends Activity implements CardContainer.CardContainerEventListener {

    // Ensure you register MainActivity with CardContainer, by calling 
    // cardContainer.registerCallback(this)

    public void addToAdapter() {
       adapter.add(...);
    }   

}

谢谢sam,我稍后会尝试这个,看起来很有希望:)sam,问题:我应该在哪里初始化调用函数的对象?(yourInterface对象=…)。我发现错误:如果我尝试初始化CardContainer中的yourInterface对象,则无法解析符号“MainActivity”。java谢谢sam,我稍后会尝试此操作,看起来很有希望:)sam,问题:我应该在哪里初始化调用函数的对象?(yourInterface对象=…)。我得到错误:如果我尝试初始化CardContainer.javaHi中的yourInterface对象,则无法解析符号“MainActivity”!我必须把
CardContainer.registerCallback放在哪里(这个)?如果我在MainActivity的onCreate方法中编写此代码,我会得到一条消息:registerCallback在…CarContainer中不是公共的。无法从包外部访问。但是,如果我将其公开,我会收到消息:非静态方法registerCallback无法从静态上下文引用。@并启用我所说的
CardContainer.registerCallback(此)
CardContainer
实例上的invoke
registerCallback
。您有权访问
main活动中的
CardContainer
实例吗?啊,好的,我现在明白了:)谢谢。回答得好@如果(mCallback!=null){mCallback.addToAdapter();}
,请在
CardContainer
中调用
mCallback
上的
addToAdapter()
之前执行空检查。另外,最好在活动的
onResume()
中注册回调,并在
onPause()
中删除回调。出于好奇,这只能通过接口实现,还是没有接口就可以实现?嗨!我必须把
CardContainer.registerCallback放在哪里(这个)?如果我在MainActivity的onCreate方法中编写此代码,我会得到一条消息:registerCallback在…CarContainer中不是公共的。无法从包外部访问。但是,如果我将其公开,我会收到消息:非静态方法registerCallback无法从静态上下文引用。@并启用我所说的
CardContainer.registerCallback(此)
CardContainer
实例上的invoke
registerCallback
。您有权访问
main活动中的
CardContainer
实例吗?啊,好的,我现在明白了:)谢谢。回答得好@如果(mCallback!=null){mCallback.addToAdapter();}
,请在
CardContainer
中调用
mCallback
上的
addToAdapter()
之前执行空检查。此外,最好在活动的
onResume()
中注册回调,并在
onPause()
中删除回调。出于好奇,这只能通过接口实现,还是没有接口就可以实现?