首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从另一个活动中启动的线程中更新活动?

如何从另一个活动中启动的线程中更新活动?
EN

Stack Overflow用户
提问于 2014-12-02 08:05:21
回答 3查看 71关注 0票数 0

我有一个主活动,单击按钮后启动线程(但线程隐藏在库中,而主活动中只有回调。现在,我想开始另一个活动(调用A),在那里我想要从线程中输出结果。以下是简化的代码:

代码语言:javascript
复制
public class Main extends Activity {


    XManager.ResultsCallback xResultsCallback = new XManager.ResultsCallback() {

// the method is called every 10 sec. 
        @Override
        public void onResult(ArrayList<String> texts) {


        }
    };

    XManager xManager = new xManager(xResultsCallback);
    View.OnClickListener onClick = new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            XManager.start();

            Intent i = new Intent(Main.this, A.class);
            startActivity(i);

        }
    };


}

每次调用onResult()方法时,我都希望更新A活动的内容。怎么做?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-02 08:16:51

使用LocalBroadcastManager,

在您的活动中创建函数:

代码语言:javascript
复制
private void sendResult() {
  Log.d("sender", "Broadcasting message");
  Intent intent = new Intent("custom-event-name");
  // You can also include some extra data.
  intent.putExtra("message", "This is my result!");
  LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}

并将BroadcastReceiver添加到您的A活动中

代码语言:javascript
复制
private BroadcastReceiver onResult= new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("jazzy","onReceive called");

    }
};

添加OnCreate

代码语言:javascript
复制
@Override
public void onCreate(Bundle savedInstanceState) {

  // Register to receive messages.
  LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
      new IntentFilter("custom-event-name"));
}

添加onDestroy

代码语言:javascript
复制
@Override
protected void onDestroy() {
  LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
  super.onDestroy();
}
票数 2
EN

Stack Overflow用户

发布于 2014-12-02 08:32:24

我有一个建议,你应该这样做:

  1. 单击按钮启动Activity A
  2. 内部活动A使用XManager本身中的回调来声明您的A实例
  3. 然后以XManager.start();的形式启动您的XManager.start();,这样您就可以获得所需活动中的所有回调。

祝你有愉快的一天!

票数 0
EN

Stack Overflow用户

发布于 2014-12-02 08:43:59

我认为如果您想要将逻辑解耦,那么除了您可以使用Android BroadcastReceiver之外,另一个灵活的选择是使用公共汽车

您可以轻松地将它与gradle集成在一起。

代码语言:javascript
复制
dependencies {
  compile 'com.squareup:otto:+'
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27244535

复制
相关文章

相似问题

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