2011-02-26 74 views
1

這是一個壞習慣,爲什麼如果它是?因此,在每一個活動加入的onCreate後,這一權利...可以使用「mContext」(在onCreate初始化)嗎?

mContext = this; 

,然後用它在方面需要所有其他情況?例如

Toast.makeText(mContext, mContext.getString(R.string.someString), Toast.LENGTH_LONG); 

編輯:如果我有這樣的事情...背景下應該如何傳遞呢?因爲無法應用(因爲View.OnClickListener())。

someButton = (Button) findViewById(R.id.someButton); 
someButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Toast.makeText(mContext, mContext.getString(R.string.warning), Toast.LENGTH_LONG).show(); 
    } 
}); 
+0

http://developer.android.com/resources/articles/avoiding-memory-leaks.html – bigstones 2011-02-26 17:49:10

回答

9

這是一種不好的習慣,爲什麼它是否是?

是的,這是一個壞習慣。這是浪費代碼。 this短於mContext,並且您有一行額外的代碼用於設置數據成員。

我不同意Damiean先生總是使用getApplication()的建議。當您特別需要Application對象時,請使用getApplication()。您既不需要也不需要Application對象來創建Toast - 您的Activity是一個非常合適的Context在那裏使用。 Application對象無法在許多地方工作,特別是在處理涉及UI的事情時。

+0

我編輯我的問題與另一個例子。 TNX。您的幫助。 – svenkapudija 2011-02-26 23:50:20

+2

@svebee:'這''肯定可以應用。您必須將其範圍與外部類名(例如'MyActivityClass.this')一起使用。 – CommonsWare 2011-02-27 00:00:23

+1

我不能強調,你不應該使用UI的應用程序上下文。這通常會以意想不到的方式行事,尤其是在Honeycomb中。 – adamp 2011-02-27 01:27:28

0

您可以改爲使用this。即使是在OnClickListener或其他子類使用ActivityName.this這樣的:

someButton = (Button) findViewById(R.id.someButton); 
someButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Toast.makeText(ActivityName.this, ActivityName.this.getString(R.string.warning), Toast.LENGTH_LONG).show(); 
    } 
}); 
相關問題