2017-03-15 65 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); 
} 

............ 
} 
相關問題