以前,我在项目中使用活动,并且使用 Intent 将数据从一个活动发送到另一个活动,这非常正常。
现在需求更改了,我必须在Dialogs上显示所有内容,而不是活动,因此将3-4个对话框类和单个活动分开。
现在我也希望对话框上具有相同的流程,但是暂时无法准确传递意图的数据!
我尝试过使用Singleton,但是问题是直到整个生命周期它都会保留数据,但是我不想要那样。
我也不能使用该界面,因为有很多事情要传递。
此外,我不能在所有这些中都使用捆绑基金,因为这全部取决于运行时,我的意思是这取决于用户是否填写输入
问题:如何将数据从一个班级传递到另一个班级或活动?并且不应该在整个生命周期中都保存价值。
答案 0 :(得分:0)
静态发送数据是一种选择,但不是一种好方法,因为静态变量的内存是在应用程序级别分配的,可以在需要内存时清除。最好的方法是使用
面向对象的方法
例如,如果您有一个类,则可以在类构造函数中发送数据,也可以通过函数调用发送数据
class class1
{
public class1(Object data) { // constructor
// you can use this data
}
//// Or through function call
public void func(Object data) { // this method can be called by other classes which has its object
// you can use this data
}
}
现在让我们假设您还有另一堂课
class class2
{
class1 obj = new class1(your_data_object); // if you want to send through constructor
void someMethod() {
obj.func(your_data_object); // send data whatever you want to send
}
}
很明显,您的案例不会像我的示例那样简单,但是要处理复杂的案例,您可以实现接口。
接口示例
定义接口
interface myListener {
public void listen(Object data);
}
现在可以说您要从class1调用class2方法。那么class2必须实现此接口。
public class class2 implements myListener {
@override
public void listen(Object data)
{
/// you got data here, do whatever you want to do that with that data.
}
}
现在在class1中,如果您有接口对象,则可以调用class2方法
interfaceRef.listen(your_data);
答案 1 :(得分:0)
尝试使用EventBus或BroadCastReceivers在本地变量中相应地传递数据。
EventBus是用于Android和Java的发布/订阅事件总线。 EventBus ...简化了组件之间的通信。解耦事件发送者和接收者。在“活动”,“片段”和后台线程中表现良好。
http://greenrobot.org/eventbus
首先在您的活动中注册到EventBus
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
EventBus.getDefault().unregister(this);
super.onStop();
}
现在可以从任何地方传递数据,无论它是活动/碎片/后台服务等,诸如此类:
EventBus.getDefault().postSticky(new MessageEvent("your data here");
现在您的活动中收到如下消息:
@Subscribe(sticky = true,threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {
Log.e("TAG","Event Received");
Log.e("TAG",event.getData);
}