Android 如何在自定义文本视图中注册broadcastreceiver
我想让BroadcastReceiver在自定义文本视图中工作。我使用了这段代码,但是没有收到任何东西。但是setText(“准备接收”)工作正常Android 如何在自定义文本视图中注册broadcastreceiver,android,Android,我想让BroadcastReceiver在自定义文本视图中工作。我使用了这段代码,但是没有收到任何东西。但是setText(“准备接收”)工作正常 public class ArefinBatteryTextView extends TextView { private BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context
public class ArefinBatteryTextView extends TextView {
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
setText("received");
}
};
public ArefinBatteryTextView(Context context) {
super(context);
}
public ArefinBatteryTextView(Context context, AttributeSet attrs) {
super(context, attrs);
setTextColor(Color.GREEN);
setTextSize(75);
setText("Ready for receiving");
LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context);
lbm.registerReceiver(receiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}
public ArefinBatteryTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
protected void onDraw (Canvas canvas) {
super.onDraw(canvas);
}
}
如何正确注册接收器以使其工作?您正在编写的IMO代码有点奇怪。视图不应包含MVC体系结构中的逻辑。。查看只是为了查看。。视图控制器可以更改视图的值。因此,请按原样使用TextView,并在活动(控制器)中定义广播接收器,然后设置值。 我相信我没有把你搞糊涂
不知道你们为什么认为这是不可能的,但我已经做到了。就是这样做的
public ArefinBatteryTextView(Context context, AttributeSet attrs) {
super(context, attrs);
setTextColor(Color.GREEN);
setTextSize(75);
setText("Ready for receiving");
context.registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
int a = intent.getIntExtra(BatteryManager.EXTRA_LEVEL,0);
setText(""+a);
}
}, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}
“我想让BroadcastReceiver在自定义textview中工作”-IMHO,负责
textview
的任何活动都应该负责BroadcastReceiver
。您可能希望考虑更多地了解UI架构模式(MVC、MVP、MVVM等);TextView
不应负责根据型号更改(本例中为电池电量)进行自我更新。您必须在活动中注册广播接收器,而不是在视图中注册。