簡體   English   中英

如何在另一個非活動類中調用 Main 活動方法

[英]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);
 }
}
  1. 使用回調機制

    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 ..

您必須在ImageColorImageColor活動作為參數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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM