如何在另一个非活动类中调用Main活动方法

时间:2017-01-17 12:01:56

标签: java android

以下是使用ColorChange方法的我的主要活动。我想在Colorchange类中调用此ImageColor方法

    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的{​​{1}}方法。

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,请告诉我。有任何方法可以在此图像颜色类中调用颜色更改方法。

5 个答案:

答案 0 :(得分:1)

试试这种方式。它会对你有所帮助。

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

答案 1 :(得分:0)

活动类由Android创建。所以上面的方法不正确。

您有两种方法可以在活动中访问该方法。

1。使用静态方法

public static void ColorChange() {   
 ImageView blue = (ImageView) findViewById(R.id.imageView);
 blue.setColorFilter(0xff000000);
 }
}
  1. 使用回调机制

    public interface ImageLoadedcallback{
        void onColorChanged(int color);
    }
    
  2. 并更新

        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);
           });
     }
    

答案 2 :(得分:0)

使用界面与非活动类的活动进行通信。在接口中创建colorChange()并获取非活动类中的接口实例并调用该方法

class MainActivity {

    interface mInterface = new interface() {
        public void colorChange(){

        }

    }
}

将mInterface传递给非活动类,并在需要时调用接口的colorChange ..

答案 3 :(得分:0)

您必须将活动作为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();
    }
}

答案 4 :(得分:0)

为清楚起见,将Activity作为静态变量可能会导致Activity泄漏,因此我们必须避免这样做。 我想如果你创建ImageColor对象的Activity是MainActivity,你可以直接传递MainActivity来实现你想要的。

strcpy

如果从其他类(而不是从MainActivity)调用它,则可以始终将MainActivity传递给要用于ImageColor对象的其他类对象。

PS:检查一下java命名约定,它会帮助你编写更好的代码