2013-04-18 48 views
0

我正在構建一個TextView子類,用於更改插入到android:text中的文本。例如,我想大寫整個文本,但爲了確保它是需要的,我需要訪問應用程序實例(我有一個布爾值,告訴它是否必須大寫)。在TextView.setText中獲取applicationContext()

我實現了這個子類:

public class UpperTextView extends TextView { 

private Context context; 

public UpperTextView(Context context) { 
    super(context); 
    this.context = context; 
} 

public UpperTextView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    this.context = context; 
} 

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

@Override 
public void setText(CharSequence text, BufferType type) { 
    //I get a NullPointerException here since var context is null 
    Context applicationContext = context.getApplicationContext(); 

    if (text != null && applicationContext instanceof MyApplication && applicationContext.doUppercase()) { 

     MyApplication myApp = (MyApplication) applicationContext; 
     myApp.getLanguagesController().getLocalizedString(text.toString().toUpperCase()); 
    } 
    super.setText(text, type); 
} 
} 

在佈局,我把它聲明如下

  <my.package.UpperTextView 
      android:id="@+id/foo" 
      android:text="bar"/> 

調用context.getApplicationContext()當我得到一個NullPointerException異常。

有沒有人遇到過這個?

+0

你不需要跟蹤上下文,你可以從一個視圖內調用getContext – njzk2

回答

1

我想你應該試試這個:

this.getContext().getApplicationContext() 

這不應該回你空指針異常。