以下是使用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
,请告诉我。有任何方法可以在此图像颜色类中调用颜色更改方法。
答案 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);
}
}
使用回调机制
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);
});
}
答案 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命名约定,它会帮助你编写更好的代码