我正在尝试在我的BroadCastReceiver类中的方法中使用imageview,但它给了我错误"无法解析findViewbyid"因为我不能在mainactivity之外使用findViewbyId。任何想法我如何使用" findViewbyId"在这个方法" onButtonSingleOrDoubleClickOrHold"。我基本上需要在调用此方法时更改imageview的颜色。
以下是我的BroadCastReceiver类
mHandler = new Handler(){
public void handleMessage(android.os.Message msg){
if(msg.what == MESSAGE_READ){
try {
byte[] readBuf = (byte[]) msg.obj;
byte[] bytes = (msg.obj).toString().getBytes();
mReadBuffer.setText(readBuf.toString());
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
if(msg.what == CONNECTING_STATUS){
if(msg.arg1 == 1)
mBluetoothStatus.setText("Connected to Device: " + (String)(msg.obj));
else
mBluetoothStatus.setText("Connection Failed");
}
}
};
我的主要活动
public class MyBroadcastReceiver extends FlicBroadcastReceiver {
@Override
protected void onRequestAppCredentials(Context context) {
// Set app credentials
}
@Override
public void onButtonSingleOrDoubleClickOrHold(Context context, FlicButton button, boolean wasQueued, int timeDiff, boolean isSingleClick, boolean isDoubleClick, boolean isHold) {
if(isSingleClick) {
ImageView blueImage = (ImageView) findViewById(R.id.imageView);
blueImage.setColorFilter(0xff000000);
}
答案 0 :(得分:1)
您可以尝试在onButtonSingleOrDoubleClickOrHold
:
if(context == null || !(context instanceof MainActivity))
return;
AppCompatActivity yourActivity = (AppCompatActivity) context;
ImageView blueImage = (ImageView) yourActivity.findViewById(R.id.imageView);
答案 1 :(得分:0)
您可以在ImageView
中添加对Activity
或MyBroadcastReceiver
的引用。您可以在实例化MyBroadcastReceiver
时将其设置为通过构造函数所需的内容,因此当您需要对已经拥有它的内容进行操作时,MyBroadcastReceiver
。
您可以决定是否通过Activity
,然后通知您的ImageView
或直接通过您的ImageView
。
另一种方法是将您的MyBroadcastReceiver
声明为活动的内部或匿名类,以便您可以直接访问主要活动的变量
答案 2 :(得分:-1)
您可以决定在MainActivity中制作静态Activity
对象,并从BroadcastReceiver
调用它。这不是一个好习惯,因为它可能会导致内存泄漏。但是,如果您真的想将方法保留在BroadcastReceiver中:
public class MainActivity extends AppCompatActivity {
public static MainActivity instance = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
this.instance = this;
}
}
然后致电:
ImageView blueImage = (ImageView) MainActivity.instance.findViewById(R.id.imageView);
我建议你重新考虑一下你的代码设计,并将改变颜色的功能移到你的活动中,然后从BroadcastReceiver调用该方法。