[英]How to use findViewbyId in BroadcastReceiver class
我試圖在我的 BroadCastReceiver 類中的一個方法中使用 imageview,但它給了我錯誤“無法解析 findViewbyid”,因為我不能在 mainactivity 之外使用 findViewbyId。任何想法我如何在這個方法“onButtonSingleOrDoubleClickOrHold”中使用“findViewbyId”。我基本上需要在調用此方法時更改 imageview 的顏色。
下面是我的 BroadCastReceiver 類
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);
}
還有我的主要活動
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
FlicManager.getInstance(this, new FlicManagerInitializedCallback() {
@Override
public void onInitialized(FlicManager manager) {
manager.initiateGrabButton(MainActivity.this);
}
});
} catch (FlicAppNotInstalledException err) {
Toast.makeText(this, "Flic App is not installed", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
FlicManager.getInstance(this, new FlicManagerInitializedCallback() {
@Override
public void onInitialized(FlicManager manager) {
FlicButton button = manager.completeGrabButton(requestCode, resultCode, data);
if (button != null) {
button.registerListenForBroadcast(FlicBroadcastReceiverFlags.CLICK_OR_DOUBLE_CLICK_OR_HOLD);
Toast.makeText(MainActivity.this, "Grabbed a button", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "Did not grab any button", Toast.LENGTH_SHORT).show();
}
}
});
}
您可以嘗試在onButtonSingleOrDoubleClickOrHold
手動將上下文轉換為 Activity :
if(context == null || !(context instanceof MainActivity))
return;
AppCompatActivity yourActivity = (AppCompatActivity) context;
ImageView blueImage = (ImageView) yourActivity.findViewById(R.id.imageView);
您可以在MyBroadcastReceiver
添加對ImageView
或Activity
的MyBroadcastReceiver
。 您可以在實例化MyBroadcastReceiver
時將其設置為將您需要的MyBroadcastReceiver
傳遞給構造函數,因此當您需要對已將其放入MyBroadcastReceiver
。
您可以決定是傳遞一個Activity
然后膨脹您的ImageView
還是直接傳遞您的ImageView
。
另一種方法是將MyBroadcastReceiver
聲明為活動的內部類或匿名類,以便您可以直接訪問主要活動的變量
您可以決定在 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 調用該方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.