Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在自定义文本视图中注册broadcastreceiver_Android - Fatal编程技术网

Android 如何在自定义文本视图中注册broadcastreceiver

Android 如何在自定义文本视图中注册broadcastreceiver,android,Android,我想让BroadcastReceiver在自定义文本视图中工作。我使用了这段代码,但是没有收到任何东西。但是setText(“准备接收”)工作正常 public class ArefinBatteryTextView extends TextView { private BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context

我想让BroadcastReceiver在自定义文本视图中工作。我使用了这段代码,但是没有收到任何东西。但是setText(“准备接收”)工作正常

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
不应负责根据型号更改(本例中为电池电量)进行自我更新。您必须在活动中注册广播接收器,而不是在视图中注册。