我正在構建一個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異常。
有沒有人遇到過這個?
你不需要跟蹤上下文,你可以從一個視圖內調用getContext – njzk2