以前,我在我的项目中使用活动,并使用意图将数据从一个活动发送到另一个活动,这非常好。
现在,需求发生了变化,我必须在对话框上显示所有内容,而不是活动,因此将有单独的3-4对话框类和单个活动。
现在我也希望对话框上有相同的流,但是有一个问题要暂时传递数据,确切地说,意图是如何工作的!
我试过使用Singleton,但问题是它一直保留数据直到整个生命周期,但我不想这样。
我也不能使用这个接口,因为有很多东西要传递。
而且,我不能使用bundle fundle n所有这些,因为这都取决于运行时,我的意思是它取决于用户是否填充输入
问:如何将数据从一个类传递到另一个类或活动?而且它不应该为整个生命周期节省价值。
发布于 2019-06-30 13:23:56
静态发送数据是一种选择,但这不是一种好方法,因为将内存分配给静态变量是在应用程序级别,并且在需要内存时可以清除。最好的方法是使用
面向对象方法
例如,如果有类,则可以在类构造函数中发送数据,也可以通过函数调用发送数据。
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);
}现在假设您希望从class2调用class1方法。然后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);发布于 2019-06-30 13:31:51
尝试使用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);
}https://stackoverflow.com/questions/56824963
复制相似问题