我有一个Main活动,点击按钮后我启动线程(但线程隐藏在库中,我只在Main活动中回调。 现在我想开始另一个活动(调用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活动的内容。怎么做?
答案 0 :(得分:2)
使用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);
}
并在 A 活动
中添加BroadcastReceiverprivate 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();
}
答案 1 :(得分:0)
我有一个建议,你应该这样做:
Activity A
XManager
实例在A
本身存在回调XManager
开始XManager.start();
,这样您就可以获得所需活动中的所有回调。祝你有美好的一天!
答案 2 :(得分:0)
我认为如果您想要解耦逻辑,除了可以使用Android BroadcastReceiver之外,另一个灵活的选择是使用Bus
您可以轻松地将其与gradle集成
dependencies {
compile 'com.squareup:otto:+'
}