我有一个主活动,单击按钮后启动线程(但线程隐藏在库中,而主活动中只有回调。现在,我想开始另一个活动(调用A),在那里我想要从线程中输出结果。以下是简化的代码:
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活动的内容。怎么做?
发布于 2014-12-02 08:16:51
使用LocalBroadcastManager,
在您的主活动中创建函数:
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活动中
private BroadcastReceiver onResult= new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("jazzy","onReceive called");
}
};添加OnCreate
@Override
public void onCreate(Bundle savedInstanceState) {
// Register to receive messages.
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
new IntentFilter("custom-event-name"));
}添加onDestroy
@Override
protected void onDestroy() {
LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
super.onDestroy();
}发布于 2014-12-02 08:32:24
我有一个建议,你应该这样做:
Activity AXManager本身中的回调来声明您的A实例XManager.start();的形式启动您的XManager.start();,这样您就可以获得所需活动中的所有回调。祝你有愉快的一天!
发布于 2014-12-02 08:43:59
我认为如果您想要将逻辑解耦,那么除了您可以使用Android BroadcastReceiver之外,另一个灵活的选择是使用公共汽车。
您可以轻松地将它与gradle集成在一起。
dependencies {
compile 'com.squareup:otto:+'
}https://stackoverflow.com/questions/27244535
复制相似问题