如何在其他类中修改MainActivity里的ImageView组件?
解决方法
方法1:把ImageView作为参数传给fit方法
直接修改CardsFit的fit方法,让它接收ImageView参数,调用时从MainActivity把card1传进去即可:
public class CardsFit { public void fit(ImageView targetImageView){ targetImageView.setImageDrawable(...); // 替换成你要设置的Drawable对象 } }
在MainActivity里的调用代码:
ImageView card1 = findViewById(R.id.Card1); CardsFit cardsFit = new CardsFit(); cardsFit.fit(card1);
方法2:通过构造函数传入ImageView
给CardsFit添加构造函数,初始化时传入card1,后续fit方法就能直接使用这个ImageView:
public class CardsFit { private ImageView mImageView; public CardsFit(ImageView imageView){ mImageView = imageView; } public void fit(){ mImageView.setImageDrawable(...); } }
MainActivity里的调用代码:
ImageView card1 = findViewById(R.id.Card1); CardsFit cardsFit = new CardsFit(card1); cardsFit.fit();
方法3:逻辑与视图分离(更推荐)
如果项目逻辑复杂,尽量避免让工具类直接操作View。可以让CardsFit负责生成要显示的Drawable,再回到MainActivity中设置到ImageView上:
public class CardsFit { public Drawable getFittedDrawable(Context context){ // 这里编写生成Drawable的逻辑,比如加载资源图或自定义绘制 return ContextCompat.getDrawable(context, R.drawable.your_target_drawable); } }
MainActivity里的调用代码:
ImageView card1 = findViewById(R.id.Card1); CardsFit cardsFit = new CardsFit(); Drawable fittedDrawable = cardsFit.getFittedDrawable(this); card1.setImageDrawable(fittedDrawable);
注意:如果操作涉及Context,务必传入正确的实例(比如MainActivity的this),避免使用ApplicationContext操作View,同时注意防范内存泄漏问题。
内容的提问来源于stack exchange,提问作者Levon
相关产品推荐
相关产品推荐

