[英]How to call a Main activity method in another non activity class
下面是我使用ColorChange
方法的主要活動。我想在ImageColor
類中調用這個Colorchange
方法
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void ColorChange() { // <----- Want to call this method in below class
ImageView blue = (ImageView) findViewById(R.id.imageView);
blue.setColorFilter(0xff000000);
}
}
這是我要調用ColorChange
方法的Mainactivity
。
public class ImageColor {
public void Imager() {
// Want to call my ColorChange method here
MainActivity obj = new MainActivity();
obj.ColorChange(); //<-------- Using mainactiviy object crashes my app.
}
}
我已經嘗試使用Mainactivity
作為對象,它使我的應用程序崩潰。我也無法將我的ColorChange
方法聲明為static
因為它使用findViewbyid
。請告訴我是否有任何方法可以在此圖像顏色類中調用顏色更改方法。
試試這個方法。 它會幫助你。
public class ImageColor {
public void Imager(Activity activity) {
// Want to call my ColorChange method here
if(activity instance of MainActivity)
((MainActivity)activity).ColorChange(); //<-------- Using mainactiviy object crashes my app.
}
}
Activity 類由 Android 創建。 所以上面的方法是不正確的。
您有 2 種方法可以訪問活動中的方法。
1 . 使用靜態方法
public static void ColorChange() {
ImageView blue = (ImageView) findViewById(R.id.imageView);
blue.setColorFilter(0xff000000);
}
}
使用回調機制
public interface ImageLoadedcallback{ void onColorChanged(int color); }
並更新
public class ImageColor {
public void Imager(ImageLoadedcallback callback) {
callback.onColorChanged(color)
}
}
並且在活動中
public void ColorChange() {
new ImageLoader().Imager(new ImageLoadedcallback{
@Override
public void onImageLoaded(Color color){
ImageView blue = (ImageView) findViewById(R.id.imageView);
blue.setColorFilter(0xff000000);
});
}
使用接口與來自非活動類的活動進行通信。 在接口中創建 colorChange() 並在非活動類中獲取接口的實例並調用該方法
class MainActivity {
interface mInterface = new interface() {
public void colorChange(){
}
}
}
將 mInterface 傳遞給非活動類並在需要時調用接口的 colorChange ..
您必須在ImageColor
類ImageColor
活動作為參數ImageColor
然后通過引用 Activity 調用您的 ColorChange() 方法。
像這樣-
public class ImageColor {
Activity activity;
public ImageColor(Activity activity)
{
this.activity = activity;
}
public void Imager()
{
if(activity instance of MainActivity)
((MainActivity)activity).ColorChange();
}
}
說清楚一點,將Activity作為靜態變量會導致Activity泄漏,所以我們必須避免這樣做。 我想如果你創建 ImageColor 對象的 Activity 是 MainActivity,你可以直接傳遞 MainActivity 來實現你想要的。
public class ImageColor {
public void Imager(MainActivity activity) {
activity.ColorChange();
}
}
如果您從其他類(而不是從 MainActivity)調用它,您始終可以將 MainActivity 傳遞給要用於 ImageColor 對象的其他類對象。
PS:也檢查一下java命名約定,它會幫助你寫出更好的代碼
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.