如何从另一个类中查找Mainactivity中的对象

时间:2017-03-15 17:57:04

标签: android object main-activity

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

我的主动:

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

但这个答案对我没有帮助。 如何在onTouchEvent或DrawingView类的其他部分中找到Imageview? 为什么这个鳕鱼对我不起作用:

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

2 个答案:

答案 0 :(得分:0)

您可以将您的Activity / Context / Widgets(更好的是,创建一个WeakReference)的引用传递给您的DrawingView类,但这样您的类就会与您的Activity紧密结合,这不是一个好习惯。

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

答案 1 :(得分: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);
}

............
}