我想在我的广播接收器的的onReceive方法来改变一个TextView,但因为它不是一个活动,我不能findViewById访问它。 我不希望在我的活动以创建广播接收器的私有类。
我如何才能访问?
我想在我的广播接收器的的onReceive方法来改变一个TextView,但因为它不是一个活动,我不能findViewById访问它。 我不希望在我的活动以创建广播接收器的私有类。
我如何才能访问?
定义一个接口,并使用一个回调,让活动知道的广播事件已收到。
public Interface BroadcastReceiverListener {
void onReceive(int arg1, String arg2); ..<----add arguments you want to pass back
}
在你的广播接收器类
ArrayList<BroadcastReceiveListener > listeners = new ArrayList<BroadcastReceiveListener >();
...
public void addBroadcastReceiveListener (BroadcastReceiveListener listener){
if(!listeners.contains(listener)){
listeners.add(listener);
}
}
public void removeBroadcastReceiveListener (BroadcastReceiveListener listener){
if(listeners.contains(listener)){
listeners.remove(listener);
}
}
在你的onReceive
for (BroadcastReceiveListener listener:listeners){
listener.onReceive(arg1, arg2);
}
在您的活动:
public class MyActivity extends Activity implements BroadcastReceiveListener {
...
broadcastReceiver.addBroadcastReceiveListener(this); <---- the instance of your receiver
...
}
public void onReceive(int arg1, String arg2){
// do whatever you need to do
}
注意。 由于您使用的接口,任何类(不只是一个活动)可以实现,所以你可以在你的应用的任何更新。 该广播接收器类不知道或护理。 它只是调用监听器,如果有任何登记。
现在,你不需要访问R,或任何与UI做的,因为你的活动是知道的唯一一类,并且可以改变,你的用户界面 - 这是Android的方法!
[编辑]
这些参数是什么,你需要他们。
想想的Interface
作为合同。 它说,任何人谁实现它,必须实现onReceive()
方法,该方法将一个整数和一个字符串被调用。 这是给你,你需要什么样的参数,如果有的话。
BroadcastReceiver.onReceive()
调用onReceive
接口的回调并传入int和字符串作为参数。
你可以改变的接口定义通过例如布尔。
public Interface BroadcastReceiverListener {
void onReceive(boolean arg1); ..<----add arguments you want to pass back
}
然后你的来电显示是这样的:
for (BroadcastReceiveListener listener:listeners){
listener.onReceive(someBooleanValue);
}
和您的回调看起来是这样的:
public void onReceive(boolean theCallerIsReady){
if(theCallerIsReady){
// do interesting stuff
}
}