在库文件中发生的事件上调用MainActivity.java中的方法
我把这个库包括在我的android项目中。在maintactity.java中,onCreate方法包括如下内容:在库文件中发生的事件上调用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
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
实例上的invokeregisterCallback
。您有权访问main活动中的CardContainer
实例吗?啊,好的,我现在明白了:)谢谢。回答得好@如果(mCallback!=null){mCallback.addToAdapter();}
,请在CardContainer
中调用mCallback
上的addToAdapter()
之前执行空检查。另外,最好在活动的onResume()
中注册回调,并在onPause()
中删除回调。出于好奇,这只能通过接口实现,还是没有接口就可以实现?嗨!我必须把CardContainer.registerCallback放在哪里(这个)代码>?如果我在MainActivity的onCreate方法中编写此代码,我会得到一条消息:registerCallback在…CarContainer中不是公共的。无法从包外部访问。但是,如果我将其公开,我会收到消息:非静态方法registerCallback无法从静态上下文引用。@并启用我所说的CardContainer.registerCallback(此)代码>是CardContainer
实例上的invokeregisterCallback
。您有权访问main活动中的CardContainer
实例吗?啊,好的,我现在明白了:)谢谢。回答得好@如果(mCallback!=null){mCallback.addToAdapter();}
,请在CardContainer
中调用mCallback
上的addToAdapter()
之前执行空检查。此外,最好在活动的onResume()
中注册回调,并在onPause()
中删除回调。出于好奇,这只能通过接口实现,还是没有接口就可以实现?