首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有任何其他的意图为类发送数据(而不是活动)?

是否有任何其他的意图为类发送数据(而不是活动)?
EN

Stack Overflow用户
提问于 2019-06-30 12:48:24
回答 2查看 205关注 0票数 0

以前,我在我的项目中使用活动,并使用意图将数据从一个活动发送到另一个活动,这非常好。

现在,需求发生了变化,我必须在对话框上显示所有内容,而不是活动,因此将有单独的3-4对话框类和单个活动。

现在我也希望对话框上有相同的流,但是有一个问题要暂时传递数据,确切地说,意图是如何工作的!

我试过使用Singleton,但问题是它一直保留数据直到整个生命周期,但我不想这样。

我也不能使用这个接口,因为有很多东西要传递。

而且,我不能使用bundle fundle n所有这些,因为这都取决于运行时,我的意思是它取决于用户是否填充输入

问:如何将数据从一个类传递到另一个类或活动?而且它不应该为整个生命周期节省价值。

EN

回答 2

Stack Overflow用户

发布于 2019-06-30 13:23:56

静态发送数据是一种选择,但这不是一种好方法,因为将内存分配给静态变量是在应用程序级别,并且在需要内存时可以清除。最好的方法是使用

面向对象方法

例如,如果有类,则可以在类构造函数中发送数据,也可以通过函数调用发送数据。

代码语言:javascript
复制
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
   }
}

现在让我们假设您有另一个类

代码语言:javascript
复制
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
    }
}

显然,您的情况不会像我的示例那样简单,但是要处理复杂的情况,您可以实现接口。

接口示例

定义接口

代码语言:javascript
复制
interface myListener {
  public void listen(Object data);
}

现在假设您希望从class2调用class1方法。然后class2必须实现这个接口。

代码语言:javascript
复制
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方法

代码语言:javascript
复制
interfaceRef.listen(your_data);
票数 0
EN

Stack Overflow用户

发布于 2019-06-30 13:31:51

尝试使用EventBus或BroadCastReceivers在局部变量中传递相应的数据。

EventBus是一种用于Android和Java的发布/订阅事件总线。EventBus...简化了组件之间的通信。事件发送者和接收者的解耦。对活动、片段和后台线程执行良好的操作。

http://greenrobot.org/eventbus

在您的活动中先注册到EventBus

代码语言:javascript
复制
  @Override
    public void onStart() {
        super.onStart();
        EventBus.getDefault().register(this);
    }

    @Override
    public void onStop() {
        EventBus.getDefault().unregister(this);
        super.onStop();
}

现在从任何地方传递数据,无论是活动/片段/后台服务等等:

代码语言:javascript
复制
 EventBus.getDefault().postSticky(new MessageEvent("your data here");

现在,在您的活动中接收以下消息:

代码语言:javascript
复制
  @Subscribe(sticky = true,threadMode = ThreadMode.MAIN)
        public void onMessageEvent(MessageEvent event) {
            Log.e("TAG","Event Received");
            Log.e("TAG",event.getData);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56824963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档