2017-03-15 49 views
1

如何从另一个此类已扩展的类中找到Mainactivity中的对象(例如Imageview)?如何从另一个类中找到Mainactivity中的对象

我Mainactivity:

public class MainActivity extends Activity implements OnClickListener { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

@Override 
public void onClick(View view){ 

}} 

我DrawingView类:

public class DrawingView extends View { 

    public DrawingView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
     super.onSizeChanged(w, h, oldw, oldh); 
     canvasBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); 
     drawCanvas = new Canvas(canvasBitmap); 
    } 

    ............ 

} 
在我activity_main.xml中

我有一个ImageView的,但我不能找到它。 我搜索网站下架,最好的答案是这样的:

How to update a TextView of an activity from another class

但这个答案剂量不会帮我。 如何在DrawingTutorial类的onTouchEvent或其他部分找到Imageview? 为什么这个鳕鱼DOS没有为我工作:

imageView = (ImageView) getRootView().findViewById(R.id.imageView); 

回答

0

你可以通过你的活动/上下文/部件(更好,创建一个WeakReference的)你DrawingView类的引用,但这样一来你的类成为紧密耦合与你的活动,这不是一个好习惯。

最好的方法是在你已经链接的第二个答案。在DrawingView类中声明一个接口并让Activity实现接口。当您需要它时,您可以在DrawingView类中调用此接口的方法,并且在您的活动中的相应实现中,您具有所有需要的引用: https://stackoverflow.com/a/27939196/3333165

0

感谢您的帖子。 但是当我改变我的DrawingView类下降代码我的应用程序通过这个按摩“不幸的是绘画已停止”关闭

我的新DrawingView类:

public class DrawingView extends View { 

//public DrawingView(Context context, AttributeSet attrs) { 
// super(context, attrs); 
//} 

Context context; 
public DrawingView(Context context, AttributeSet attrs){ 
    super(context, attrs); 
    this.context=context; 
} 

public void Update(){ 
    imageView = (ImageView) ((Activity)context).findViewById(R.id.imageView); 
    imageView.setVisibility(GONE); 
} 

@Override 
protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
    super.onSizeChanged(w, h, oldw, oldh); 
    canvasBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); 
    drawCanvas = new Canvas(canvasBitmap); 
} 

............ 
} 
相关问题