0

我正在构建一个TextView子类来更改插入到android:text. 例如,我想将整个文本大写,但为了确保需要它,我需要访问 Application 实例(我有一个布尔值来判断它是否必须大写)。

我实现了这个子类:

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"/>

调用时出现 NullPointerException context.getApplicationContext()

有人已经遇到过这个吗?

4

3 回答 3

1

我认为你应该试试这个:

this.getContext().getApplicationContext()

这不应该返回空指针异常。

于 2013-04-18T15:28:48.020 回答
0

检查下面的链接以了解何时使用 getApplicationContext() 以及何时使用 Activity Context

何时调用活动上下文或应用程序上下文?

大多数时候最好使用 Activity 上下文

于 2013-04-18T15:21:37.483 回答
0

这是不正确的本地化方式。检查以下链接:http: //developer.android.com/guide/topics/resources/localization.html

于 2013-04-18T15:23:33.063 回答